This is an evolving analysis of the Electronic Surgical Discharge Dataset

Completion Analysis

Overall Completion Fraction

Patient Searching

Distribution of Common Last Names

Last Name Frequency

Demographic Analysis

Ethnicity

Ethnicity Percentage (%) Lower 95% CI Upper 95% CI
Asian 0.03 0.00 0.48
Black 92.30 91.85 92.76
Coloured 2.96 2.51 3.42
Indian 1.49 1.05 1.95
Other 0.16 0.00 0.62
White 3.06 2.61 3.51

Sex

Gender Percentage (%) Lower 95% CI Upper 95% CI
Female 52.81 51.84 53.77
Male 47.14 46.17 48.11
Other 0.05 0.00 1.02

Age Group

Age Group Percentage (%) Lower 95% CI Upper 95% CI
Infant 0.28 0.00 1.27
Preschool Child 0.00 0.00 0.99
Child 1.48 0.49 2.46
Adolescent 4.02 3.03 5.00
Young Adult 6.00 5.02 6.99
Adult 34.09 33.11 35.08
Middle Aged 35.87 34.88 36.85
Aged 14.99 14.01 15.98
80+ 3.28 2.29 4.26

Length of Stay Analysis

7.97% of patient’s were assessed to have outlier length of stays. This was assessed by means of a cutoff of \(1.5*IQR\) below the first and above the third quartile.

Patient length of stay density visualization

3D Plot

2D Plot

Length of Stay by Age Group

ICD Analysis

ICD Chapter Percentage (%) Lower 95% CI Upper 95% CI
Infectious & Parasitic 3.36 2.34 4.39
Neoplasms 18.67 17.65 19.71
Blood & Immune 0.48 0.00 1.51
Endocrine, etc 2.54 1.53 3.58
Mental & Behavioural 0.23 0.00 1.27
Nervous System 0.19 0.00 1.22
Eye & Adnexa 0.05 0.00 1.09
Ear & Mastoid 0.02 0.00 1.05
Circulatory System 5.37 4.35 6.40
Respiratory System 0.47 0.00 1.50
Digestive System 48.53 47.51 49.56
Skin & Subcutaneous 5.78 4.76 6.81
Musculoskeletal 1.15 0.13 2.18
Genitourinary System 2.96 1.94 3.99
Pregnancy 1.09 0.07 2.13
Perinatal 0.02 0.00 1.05
Congenital 0.45 0.00 1.48
Abnormal Findings 1.80 0.78 2.84
Injury, Poisoning, etc 1.00 0.00 2.03
Morbidity & Mortality 0.15 0.00 1.18
Influencing Factors 0.90 0.00 1.93
Special Purpose 0.01 0.00 1.04
Neoplasm Morphology 4.78 3.76 5.82

Full Dataset

Top Ten Codes

Demographic ICD Flow

ICD Chapter Sankey Flow

ICD Code Sankey Flow

Waiting for profiling to be done...
Waiting for profiling to be done...

Length of Stay Regression Analysis

Analysis of predictors of a length of stay greater than 5 days in a surgical ward at a Wits institution.

Crosstable Analysis

Sex Crosstable
Fields 5 or Less More than 5
Female 2760 3356
Male 2176 3296
Other 3 2
Ethnicity Crosstable
Fields 5 or Less More than 5
Asian 3 0
Black 4535 6132
Coloured 143 206
Indian 92 89
Other 9 6
White 157 221
Age Group Crosstable
Fields 5 or Less More than 5
Infant 14 13
Preschool Child 0 0
Child 105 59
Adolescent 263 195
Young Adult 407 264
Adult 1859 2025
Middle Aged 1540 2665
Aged 595 1189
80+ 156 244
Discharge Ward Crosstable
Fields 5 or Less More than 5
Burns Unit 0 1
Trauma Unit 0 2
Unit 1 1552 2270
Unit 3 1225 1914
Unit 4 1043 815
Unit 5 824 1150
Unknown 245 305
Vascular 50 197
Type of Discharge Crosstable
Fields 5 or Less More than 5
Declined Treatment 16 25
Demised 0 1
Home 4144 5531
Other 619 793
Transfer 160 304
ICD Chapter Crosstable
Fields 5 or Less More than 5
Infectious & Parasitic 114 228
Neoplasms 590 1326
Blood & Immune 17 33
Endocrine, etc 68 188
Mental & Behavioural 13 10
Nervous System 7 12
Eye & Adnexa 2 3
Ear & Mastoid 1 1
Circulatory System 161 363
Respiratory System 16 30
Digestive System 2182 2650
Skin & Subcutaneous 355 212
Musculoskeletal 38 88
Genitourinary System 187 106
Pregnancy 81 24
Perinatal 0 2
Congenital 16 27
Abnormal Findings 91 90
Injury, Poisoning, etc 51 49
Morbidity & Mortality 8 6
Influencing Factors 29 58
Special Purpose 0 2
Neoplasm Morphology 136 364
ICD Block Title Crosstable
Fields 5 or Less More than 5
(A00-A09) Intestinal infectious diseases 17 51
(A15-A19) Tuberculosis 14 38
(A20-A28) Certain zoonotic bacterial diseases 0 1
(A30-A49) Other bacterial diseases 7 33
(A50-A64) Infections with a predominantly sexual mode of transmission 18 16
(A65-A69) Other spirochaetal diseases 1 0
(A80-A89) Viral infections of the central nervous system 0 1
(B00-B09) Viral infections characterized by skin and mucous membrane lesions 3 0
(B15-B19) Viral hepatitis 6 5
(B20-B24) Human immunodeficiency virus [HIV] disease 15 46
(B25-B34) Other viral diseases 0 2
(B35-B49) Mycoses 10 4
(B65-B83) Helminthiases 4 15
(B95-B98) Bacterial, viral and other infectious agents 3 11
(B99) Other infectious diseases 16 5
(C00-C14) Malignant neoplasms, stated or presumed to be primary, of specified sites, except of lymphoid, haematopoietic and related tissue: Lip, oral cavity and pharynx 0 1
(C15-C26) Malignant neoplasms, stated or presumed to be primary, of specified sites, except of lymphoid, haematopoietic and related tissue: Digestive organs 270 919
(C30-C39) Malignant neoplasms, stated or presumed to be primary, of specified sites, except of lymphoid, haematopoietic and related tissue: Respiratory and intrathoracic organs 0 2
(C40-C41) Malignant neoplasms, stated or presumed to be primary, of specified sites, except of lymphoid, haematopoietic and related tissue: Bone and articular cartilage 0 1
(C43-C44) Malignant neoplasms, stated or presumed to be primary, of specified sites, except of lymphoid, haematopoietic and related tissue: Skin 2 19
(C45-C49) Malignant neoplasms, stated or presumed to be primary, of specified sites, except of lymphoid, haematopoietic and related tissue: Mesothelial and soft tissue 9 17
(C50) Malignant neoplasms, stated or presumed to be primary, of specified sites, except of lymphoid, haematopoietic and related tissue: Breast 180 185
(C51-C57) Malignant neoplasms, stated or presumed to be primary, of specified sites, except of lymphoid, haematopoietic and related tissue: Female genital organs 10 21
(C60-C63) Malignant neoplasms, stated or presumed to be primary, of specified sites, except of lymphoid, haematopoietic and related tissue: Male genital organs 5 4
(C64-C68) Malignant neoplasms, stated or presumed to be primary, of specified sites, except of lymphoid, haematopoietic and related tissue: Urinary tract 0 2
(C69-C72) Malignant neoplasms, stated or presumed to be primary, of specified sites, except of lymphoid, haematopoietic and related tissue: Eye, brain and other parts of central nervous system 0 1
(C73-C75) Malignant neoplasms, stated or presumed to be primary, of specified sites, except of lymphoid, haematopoietic and related tissue: Thyroid and other endocrine glands 16 17
(C76-C80) Malignant neoplasms of ill-defined, secondary and unspecified sites 3 6
(C81-C96) Malignant neoplasms, stated or presumed to be primary, of lymphoid, haematopoietic and related tissue 2 9
(C97) Malignant neoplasms of independent (primary) multiple sites 0 2
(D00-D09) In situ neoplasms 12 30
(D10-D36) Benign neoplasms 58 54
(D37-D48) Neoplasms of uncertain or unknown behaviour [see note, page 226] 23 36
(D50-D53) Nutritional anaemias 13 15
(D55-D59) Haemolytic anaemias 2 2
(D60-D64) Aplastic and other anaemias 0 1
(D65-D69) Coagulation defects, purpura and other haemorrhagic conditions 1 2
(D70-D77) Other diseases of blood and blood-forming organs 1 11
(D80-D89) Certain disorders involving the immune mechanism 0 2
(E00-E07) Disorders of thyroid gland 28 43
(E10-E14) Diabetes mellitus 30 113
(E15-E16) Other disorders of glucose regulation and pancreatic internal secretion 1 3
(E20-E35) Disorders of other endocrine glands 6 23
(E70-E90) Metabolic disorders 3 6
(F00-F09) Organic, including symptomatic, mental disorders 1 2
(F10-F19) Mental and behavioural disorders due to psychoactive substance use 3 0
(F20-F29) Schizophrenia, schizotypal and delusional disorders 0 1
(F30-F39) Mood [affective] disorders 3 1
(F40-F48) Neurotic, stress-related and somatoform disorders 0 1
(F50-F59) Behavioural syndromes associated with physiological disturbances and physical factors 1 0
(F70-F79) Mental retardation 0 2
(F90-F98) Behavioural and emotional disorders with onset usually occurring in childhood and adolescence 1 0
(F99) Unspecified mental disorder 4 3
(G00-G09) Inflammatory diseases of the central nervous system 3 3
(G10-G14) Systemic atrophies primarily affecting the central nervous system 0 2
(G40-G47) Episodic and paroxysmal disorders 0 2
(G50-G59) Nerve, nerve root and plexus disorders 2 0
(G70-G73) Diseases of myoneural junction and muscle 1 3
(G80-G83) Cerebral palsy and other paralytic syndromes 1 1
(G90-G99) Other disorders of the nervous system 0 1
(H00-H06) Disorders of eyelid, lacrimal system and orbit 2 0
(H25-H28) Disorders of lens 0 2
(H46-H48) Disorders of optic nerve and visual pathways 0 1
(H60-H62) Diseases of external ear 1 0
(H90-H95) Other disorders of ear 0 1
(I05-I09) Chronic rheumatic heart diseases 3 1
(I10-I15) Hypertensive diseases 44 87
(I20-I25) Ischaemic heart diseases 1 4
(I26-I28) Pulmonary heart disease and diseases of pulmonary circulation 2 10
(I30-I52) Other forms of heart disease 6 7
(I60-I69) Cerebrovascular diseases 0 4
(I70-I79) Diseases of arteries, arterioles and capillaries 41 171
(I80-H89) Diseases of veins, lymphatic vessels and lymph nodes, not elsewhere classified 60 73
(I95-I99) Other and unspecified disorders of the circulatory system 4 6
(J00-J06) Acute upper respiratory infections 1 0
(J09-J18) Influenza and pneumonia 1 7
(J20-J22) Other acute lower respiratory infections 0 2
(J30-J39) Other diseases of upper respiratory tract 1 2
(J40-J47) Chronic lower respiratory diseases 7 8
(J80-J84) Other respiratory diseases principally affecting the interstitium 0 1
(J85-J94) Other diseases of pleura 2 6
(J85-J94) Suppurative and necrotic conditions of lower respiratory tract 4 3
(J95-J99) Other diseases of the respiratory system 0 1
(K00-K14) Diseases of oral cavity, salivary glands and jaws 3 2
(K20-K31) Diseases of oesophagus, stomach and duodenum 372 396
(K35-K38) Diseases of appendix 408 452
(K40-K46) Hernia 341 256
(K50-K52) Noninfective enteritis and colitis 13 12
(K55-K64) Other diseases of intestines 282 361
(K65-K67) Diseases of peritoneum 2 15
(K70-K77) Diseases of liver 9 72
(K80-K87) Disorders of gallbladder, biliary tract and pancreas 669 994
(K90-K93) Other diseases of the digestive system 83 90
(L00-L08) Infections of the skin and subcutaneous tissue 330 180
(L10-L14) Bullous disorders 1 1
(L60-L75) Disorders of skin appendages 3 5
(L80-L99) Other disorders of the skin and subcutaneous tissue 21 26
(M00-M25) Arthropathies: Arthrosis 1 1
(M00-M25) Arthropathies: Infectious arthropathies 0 3
(M00-M25) Arthropathies: Inflammatory polyarthropathies 4 5
(M00-M25) Arthropathies: Other joint disorders 0 2
(M30-M36) Systemic connective tissue disorders 2 1
(M40-M54) Dorsopathies: Deforming dorsopathies 4 1
(M60-M79) Soft tissue disorders: Disorders of muscles 5 10
(M60-M79) Soft tissue disorders: Disorders of synovium and tendon 2 1
(M60-M79) Soft tissue disorders: Other soft tissue disorders 16 57
(M80-M94) Osteopathies and chondropathies: Chondropathies 1 0
(M80-M94) Osteopathies and chondropathies: Other osteopathies 2 3
(M800) Morphology Classification: Neoplasms, NOS 6 26
(M801-M804) Morphology Classification: Neoplasms, NOS 3 11
(M805-M808) Morphology Classification: Squamous cell neoplasms 15 44
(M809-M811) Morphology Classification: Basal cell neoplasms 0 2
(M812-M813) Morphology Classification: Transitional cell papillomas and carcinomas 0 1
(M814-M838) Morphology Classification: Adenomas and adenocarcinomas 71 213
(M844-M849) Morphology Classification: Cystic, mucinous and serous neoplasms 4 3
(M850-M854) Morphology Classification: Ductal and lobular neoplasms 0 2
(M868-M871) Morphology Classification: Paragangliomas and glomus tumours 0 3
(M872-M879) Morphology Classification: Naevi and melanomas 0 2
(M880) Morphology Classification: 3 6
(M881-M883) Morphology Classification: Fibromatous neoplasms 3 12
(M884) Morphology Classification: Myxomatous neoplasms 0 1
(M885-M888) Morphology Classification: Lipomatous neoplasms 3 3
(M889-M892) Morphology Classification: Myomatous neoplasms 0 1
(M893-M899) Morphology Classification: Complex mixed and stromal neoplasms 2 18
(M900-M903) Morphology Classification: Fibroepithelial neoplasms 23 6
(M904) Morphology Classification: Synovial-like neoplasms 0 1
(M906-M909) Morphology Classification: Germ cell neoplasms 0 2
(M912-M916) Morphology Classification: Blood vessel tumours 0 1
(M918-M924) Morphology Classification: Osseous and chondromatous neoplasms 1 0
(M95-M99) Other disorders of the musculoskeletal system and connective tissue 1 4
(M954-M957) Morphology Classification: Nerve sheath tumours 1 2
(M959-M971) Morphology Classification: Hodgkin and non-Hodgkin lymphoma 0 3
(M995-M997) Morphology Classification: Chronic myeloprpliferative disorders 1 1
(N10-N16) Renal tubulo-interstitial diseases 5 11
(N17-N19) Renal failure 5 23
(N20-N23) Urolithiasis 0 1
(N25-N29) Other disorders of kidney and ureter 2 2
(N30-N39) Other diseases of urinary system 15 10
(N40-N51) Diseases of male genital organs 9 11
(N60-N64) Disorders of breast 119 15
(N70-N77) Inflammatory diseases of female pelvic organs 15 12
(N80-N98) Noninflammatory disorders of female genital tract 17 21
(O00-O08) Pregnancy with abortive outcome 0 6
(O20-O29) Other maternal disorders predominantly related to pregnancy 2 1
(O60-O75) Complications of labour and delivery 2 4
(O80-O84) Delivery 0 1
(O85-O92) Complications predominantly related to the puerperium 77 12
(P80-P83) Conditions involving the integument and temperature regulation of fetus and newborn 0 1
(P90-P96) Other disorders originating in the perinatal period 0 1
(Q10-Q18) Congenital malformations of eye, ear, face and neck 2 0
(Q20-Q28) Congenital malformations of the circulatory system 0 1
(Q38-Q45) Other congenital malformations of the digestive system 9 16
(Q50-Q56) Congenital malformations of genital organs 1 3
(Q80-Q89) Other congenital malformations 3 6
(Q90-Q99) Chromosomal abnormalities, not elsewhere classified 1 1
(R00-R09) Symptoms and signs involving the circulatory and respiratory systems 1 0
(R10-R19) Symptoms and signs involving the digestive system and abdomen 75 66
(R20-R23) Symptoms and signs involving the skin and subcutaneous tissue 14 9
(R30-R39) Symptoms and signs involving the urinary system 0 1
(R50-R69) General symptoms and signs 0 7
(R70-R79) Abnormal findings on examination of blood, without diagnosis 0 1
(R83-R89) Abnormal findings on examination of other body fluids, substances and tissues, without diagnosis 1 0
(R90-R94) Abnormal findings on diagnostic imaging and in function studies, without diagnosis 0 6
(S00-S09) Injuries to the head 1 0
(S10-S19) Injuries to the neck 1 0
(S20-S29) Injuries to the thorax 0 1
(S30-S39) Injuries to the abdomen, lower back, lumbar spine and pelvis 5 25
(S40-S49) Injuries to the shoulder and upper arm 1 0
(S70-S79) Injuries to the hip and thigh 0 2
(S80-S89) Injuries to the knee and lower leg 1 2
(S90-S99) Injuries to the ankle and foot 2 0
(T00-T07) Injuries involving multiple body regions 1 0
(T15-T19) Effects of foreign body entering through natural orifice 5 0
(T20-T32) Burns and corrosions: Burns and corrosions confined to eye and internal organs 0 1
(T20-T32) Burns and corrosions: Burns and corrosions of external body surface, specified by site 3 0
(T36-T50) Poisoning by drugs, medicaments and biological substances 10 2
(T51-T65) Toxic effects of substances chiefly nonmedicinal as to source 17 2
(T80-T88) Complications of surgical and medical care, not elsewhere classified 4 14
(U50) Drug resistant tuberculosis 0 2
(V01-V09) Accidents: Transport accidents: Pedestrian injured in transport accident 0 1
(W75-W84) Accidents: Other external causes of accidental injury: Other accidental threats to breathing 3 1
(X40-X49) Accidents: Other external causes of accidental injury: Accidental poisoning by and exposure to noxious substances 0 1
(X60-X84) Intentional self-harm 5 1
(X85-Y09) Assault 0 1
(Y83-Y84) Complications of medical and surgical care: Surgical and other medical procedures as the cause of abnormal reaction of the patient, or of later complication, without mention of misadventure at the time of the procedure 0 1
(Z00-Z13) Persons encountering health services for examination and investigation 1 1
(Z40-Z54) Persons encountering health services for specific procedures and health care 5 21
(Z70-Z76) Persons encountering health services in other circumstances 1 0
(Z80-Z99) Persons with potential health hazards related to family and personal history and certain conditions influencing health status 22 36

Univariate Regression Analysis

Gender Regression
Variable OR 2.5% 97.5% p Val
(Intercept) 1.20 1.15 1.27 0.0000 ***
genderMale 1.25 1.16 1.35 0.0000 ***
genderOther 0.55 0.07 3.34 0.5172

Wald Significance
Elements Results
Chi Squared 3.560448e+01

Degrees of Freedom 2.000000e+00

p Value 1.856029e-08 ***
Ethnicity Regression
Variable OR 2.5% 97.5% p Val
(Intercept) 1.34 1.29 1.39 0.0000 ***
ethnicityColoured 1.07 0.87 1.34 0.5185

ethnicityIndian 0.73 0.54 0.98 0.0366 *
ethnicityOther 0.50 0.17 1.38 0.1850

ethnicityWhite 1.03 0.83 1.27 0.8117

Wald Significance
Elements Results
Chi Squared 6.6697527

Degrees of Freedom 4.0000000

p Value 0.1544039

Age Group Regression
Variable OR 2.5% 97.5% p Val
(Intercept) 1.04 0.93 1.17 0.4605

Age_Group.L 2.72 1.74 4.26 0.0000 ***
Age_Group.Q 1.34 0.86 2.06 0.1852

Age_Group.C 0.53 0.37 0.77 0.0007 ***
Age_Group^4 0.90 0.67 1.20 0.4701

Age_Group^5 0.93 0.75 1.16 0.5419

Age_Group^6 1.27 1.08 1.50 0.0045 **
Age_Group^7 0.86 0.76 0.98 0.0279 *
Wald Significance
Elements Results
Chi Squared 320.0487

Degrees of Freedom 7.0000

p Value 0.0000 ***
Discharge Ward Regression
Variable OR 2.5% 97.5% p Val
(Intercept) 1.45 1.36 1.55 0.0000 ***
dischargeWardUnit 3 1.07 0.97 1.18 0.1842

dischargeWardUnit 4 0.53 0.48 0.60 0.0000 ***
dischargeWardUnit 5 0.95 0.85 1.06 0.3642

dischargeWardUnknown 0.84 0.70 1.01 0.0616 .
dischargeWardVascular 2.71 1.98 3.77 0.0000 ***
Wald Significance
Elements Results
Chi Squared 204.2357

Degrees of Freedom 5.0000

p Value 0.0000 ***
Type of Discharge Regression
Variable OR 2.5% 97.5% p Val
(Intercept) 1.56 0.84 2.98 0.1633

dischargeTypeHome 0.85 0.44 1.57 0.6044

dischargeTypeOther 0.82 0.43 1.54 0.5516

dischargeTypeTransfer 1.20 0.61 2.29 0.5880

Wald Significance
Elements Results
Chi Squared 12.691636809

Degrees of Freedom 3.000000000

p Value 0.005353211 **
ICD Chapter Regression
Variable OR 2.5% 97.5% p Val
(Intercept) 1.22 1.05 1.40 0.0059 **
ICD_Chapter_Short.L 0.36 0.18 0.67 0.0018 **
ICD_Chapter_Short.Q 2.80 1.79 4.25 0.0000 ***
ICD_Chapter_Short.C 2.67 1.56 4.59 0.0003 ***
ICD_Chapter_Short^4 1.68 0.97 3.13 0.0755 .
ICD_Chapter_Short^5 1.15 0.61 2.39 0.6826

ICD_Chapter_Short^6 1.13 0.60 2.24 0.7110

ICD_Chapter_Short^7 1.84 1.16 2.93 0.0095 **
ICD_Chapter_Short^8 0.86 0.51 1.42 0.5597

ICD_Chapter_Short^9 0.39 0.18 0.81 0.0139 *
ICD_Chapter_Short^10 0.46 0.19 0.99 0.0586 .
ICD_Chapter_Short^11 0.37 0.16 0.78 0.0135 *
ICD_Chapter_Short^12 0.53 0.25 1.08 0.0868 .
ICD_Chapter_Short^13 2.61 1.43 4.63 0.0012 **
ICD_Chapter_Short^14 0.60 0.31 1.12 0.1086

ICD_Chapter_Short^15 0.43 0.21 0.87 0.0173 *
ICD_Chapter_Short^16 0.28 0.15 0.52 0.0001 ***
ICD_Chapter_Short^17 0.76 0.46 1.28 0.3013

ICD_Chapter_Short^18 1.60 1.13 2.26 0.0072 **
Wald Significance
Elements Results
Chi Squared 437.0637

Degrees of Freedom 18.0000

p Value 0.0000 ***
ICD Block Title Regression
Variable OR 2.5% 97.5% p Val
(Intercept) 2.94 1.73 5.25 0.0001 ***
ICD_Title(A15-A19) Tuberculosis 0.92 0.41 2.12 0.8485

ICD_Title(A30-A49) Other bacterial diseases 1.60 0.62 4.53 0.3473

ICD_Title(A50-A64) Infections with a predominantly sexual mode of transmission 0.30 0.12 0.72 0.0070 **
ICD_Title(B15-B19) Viral hepatitis 0.28 0.07 1.05 0.0588 .
ICD_Title(B20-B24) Human immunodeficiency virus [HIV] disease 1.04 0.47 2.34 0.9186

ICD_Title(B35-B49) Mycoses 0.14 0.03 0.46 0.0023 **
ICD_Title(B65-B83) Helminthiases 1.28 0.40 4.94 0.6993

ICD_Title(B95-B98) Bacterial, viral and other infectious agents 1.25 0.34 5.99 0.7559

ICD_Title(B99) Other infectious diseases 0.11 0.03 0.32 0.0001 ***
ICD_Title(C15-C26) Malignant neoplasms, stated or presumed to be primary, of specified sites, except of lymphoid, haematopoietic and related tissue: Digestive organs 1.16 0.64 2.00 0.6135

ICD_Title(C43-C44) Malignant neoplasms, stated or presumed to be primary, of specified sites, except of lymphoid, haematopoietic and related tissue: Skin 3.23 0.82 21.60 0.1400

ICD_Title(C45-C49) Malignant neoplasms, stated or presumed to be primary, of specified sites, except of lymphoid, haematopoietic and related tissue: Mesothelial and soft tissue 0.64 0.24 1.75 0.3746

ICD_Title(C50) Malignant neoplasms, stated or presumed to be primary, of specified sites, except of lymphoid, haematopoietic and related tissue: Breast 0.35 0.19 0.62 0.0004 ***
ICD_Title(C51-C57) Malignant neoplasms, stated or presumed to be primary, of specified sites, except of lymphoid, haematopoietic and related tissue: Female genital organs 0.71 0.28 1.85 0.4790

ICD_Title(C60-C63) Malignant neoplasms, stated or presumed to be primary, of specified sites, except of lymphoid, haematopoietic and related tissue: Male genital organs 0.27 0.06 1.14 0.0734 .
ICD_Title(C73-C75) Malignant neoplasms, stated or presumed to be primary, of specified sites, except of lymphoid, haematopoietic and related tissue: Thyroid and other endocrine glands 0.36 0.15 0.86 0.0229 *
ICD_Title(C76-C80) Malignant neoplasms of ill-defined, secondary and unspecified sites 0.68 0.16 3.50 0.6122

ICD_Title(C81-C96) Malignant neoplasms, stated or presumed to be primary, of lymphoid, haematopoietic and related tissue 3.06 0.52 58.53 0.3052

ICD_Title(D00-D09) In situ neoplasms 0.85 0.36 2.05 0.7132

ICD_Title(D10-D36) Benign neoplasms 0.32 0.16 0.61 0.0007 ***
ICD_Title(D37-D48) Neoplasms of uncertain or unknown behaviour [see note, page 226] 0.53 0.25 1.13 0.1035

ICD_Title(D50-D53) Nutritional anaemias 0.39 0.15 0.99 0.0472 *
ICD_Title(D55-D59) Haemolytic anaemias 0.34 0.04 3.01 0.2990

ICD_Title(D65-D69) Coagulation defects, purpura and other haemorrhagic conditions 0.68 0.06 15.17 0.7589

ICD_Title(D70-D77) Other diseases of blood and blood-forming organs 3.74 0.65 70.89 0.2224

ICD_Title(E00-E07) Disorders of thyroid gland 0.52 0.25 1.07 0.0800 .
ICD_Title(E10-E14) Diabetes mellitus 1.28 0.64 2.51 0.4770

ICD_Title(E15-E16) Other disorders of glucose regulation and pancreatic internal secretion 1.02 0.12 21.38 0.9867

ICD_Title(E20-E35) Disorders of other endocrine glands 1.30 0.47 4.00 0.6221

ICD_Title(E70-E90) Metabolic disorders 0.68 0.16 3.50 0.6122

ICD_Title(F00-F09) Organic, including symptomatic, mental disorders 0.68 0.06 15.17 0.7589

ICD_Title(F30-F39) Mood [affective] disorders 0.11 0.01 0.95 0.0669 .
ICD_Title(F99) Unspecified mental disorder 0.26 0.05 1.27 0.0931 .
ICD_Title(G00-G09) Inflammatory diseases of the central nervous system 0.34 0.06 1.99 0.2115

ICD_Title(G70-G73) Diseases of myoneural junction and muscle 1.02 0.12 21.38 0.9867

ICD_Title(G80-G83) Cerebral palsy and other paralytic syndromes 0.34 0.01 8.91 0.4543

ICD_Title(I05-I09) Chronic rheumatic heart diseases 0.11 0.01 0.95 0.0669 .
ICD_Title(I10-I15) Hypertensive diseases 0.67 0.34 1.28 0.2376

ICD_Title(I20-I25) Ischaemic heart diseases 1.36 0.18 27.59 0.7897

ICD_Title(I26-I28) Pulmonary heart disease and diseases of pulmonary circulation 1.70 0.40 11.78 0.5196

ICD_Title(I30-I52) Other forms of heart disease 0.40 0.12 1.38 0.1379

ICD_Title(I70-I79) Diseases of arteries, arterioles and capillaries 1.42 0.73 2.68 0.2902

ICD_Title(I80-H89) Diseases of veins, lymphatic vessels and lymph nodes, not elsewhere classified 0.41 0.21 0.78 0.0076 **
ICD_Title(I95-I99) Other and unspecified disorders of the circulatory system 0.51 0.13 2.19 0.3388

ICD_Title(J09-J18) Influenza and pneumonia 2.38 0.38 46.17 0.4327

ICD_Title(J30-J39) Other diseases of upper respiratory tract 0.68 0.06 15.17 0.7589

ICD_Title(J40-J47) Chronic lower respiratory diseases 0.39 0.12 1.26 0.1084

ICD_Title(J85-J94) Other diseases of pleura 1.02 0.21 7.41 0.9817

ICD_Title(J85-J94) Suppurative and necrotic conditions of lower respiratory tract 0.26 0.05 1.27 0.0931 .
ICD_Title(K00-K14) Diseases of oral cavity, salivary glands and jaws 0.23 0.03 1.48 0.1202

ICD_Title(K20-K31) Diseases of oesophagus, stomach and duodenum 0.36 0.20 0.62 0.0004 ***
ICD_Title(K35-K38) Diseases of appendix 0.38 0.21 0.65 0.0007 ***
ICD_Title(K40-K46) Hernia 0.26 0.14 0.45 0.0000 ***
ICD_Title(K50-K52) Noninfective enteritis and colitis 0.31 0.12 0.81 0.0178 *
ICD_Title(K55-K64) Other diseases of intestines 0.44 0.24 0.76 0.0044 **
ICD_Title(K65-K67) Diseases of peritoneum 2.55 0.63 17.24 0.2440

ICD_Title(K70-K77) Diseases of liver 2.72 1.15 6.85 0.0267 *
ICD_Title(K80-K87) Disorders of gallbladder, biliary tract and pancreas 0.50 0.28 0.86 0.0165 *
ICD_Title(K90-K93) Other diseases of the digestive system 0.37 0.19 0.68 0.0018 **
ICD_Title(L00-L08) Infections of the skin and subcutaneous tissue 0.19 0.10 0.32 0.0000 ***
ICD_Title(L10-L14) Bullous disorders 0.34 0.01 8.91 0.4543

ICD_Title(L60-L75) Disorders of skin appendages 0.57 0.13 2.99 0.4679

ICD_Title(L80-L99) Other disorders of the skin and subcutaneous tissue 0.42 0.19 0.93 0.0331 *
ICD_Title(M00-M25) Arthropathies: Arthrosis 0.34 0.01 8.91 0.4543

ICD_Title(M00-M25) Arthropathies: Inflammatory polyarthropathies 0.43 0.10 1.89 0.2393

ICD_Title(M30-M36) Systemic connective tissue disorders 0.17 0.01 1.88 0.1585

ICD_Title(M40-M54) Dorsopathies: Deforming dorsopathies 0.09 0.00 0.62 0.0325 *
ICD_Title(M60-M79) Soft tissue disorders: Disorders of muscles 0.68 0.21 2.44 0.5309

ICD_Title(M60-M79) Soft tissue disorders: Disorders of synovium and tendon 0.17 0.01 1.88 0.1585

ICD_Title(M60-M79) Soft tissue disorders: Other soft tissue disorders 1.21 0.55 2.66 0.6306

ICD_Title(M80-M94) Osteopathies and chondropathies: Other osteopathies 0.51 0.08 4.12 0.4808

ICD_Title(M800) Morphology Classification: Neoplasms, NOS 1.47 0.54 4.49 0.4671

ICD_Title(M801-M804) Morphology Classification: Neoplasms, NOS 1.25 0.34 5.99 0.7559

ICD_Title(M805-M808) Morphology Classification: Squamous cell neoplasms 1.00 0.45 2.25 0.9948

ICD_Title(M814-M838) Morphology Classification: Adenomas and adenocarcinomas 1.03 0.55 1.88 0.9135

ICD_Title(M844-M849) Morphology Classification: Cystic, mucinous and serous neoplasms 0.26 0.05 1.27 0.0931 .
ICD_Title(M880) Morphology Classification: 0.68 0.16 3.50 0.6122

ICD_Title(M881-M883) Morphology Classification: Fibromatous neoplasms 1.36 0.38 6.48 0.6622

ICD_Title(M885-M888) Morphology Classification: Lipomatous neoplasms 0.34 0.06 1.99 0.2115

ICD_Title(M893-M899) Morphology Classification: Complex mixed and stromal neoplasms 3.06 0.77 20.51 0.1602

ICD_Title(M900-M903) Morphology Classification: Fibroepithelial neoplasms 0.09 0.03 0.24 0.0000 ***
ICD_Title(M95-M99) Other disorders of the musculoskeletal system and connective tissue 1.36 0.18 27.59 0.7897

ICD_Title(M954-M957) Morphology Classification: Nerve sheath tumours 0.68 0.06 15.17 0.7589

ICD_Title(M995-M997) Morphology Classification: Chronic myeloprpliferative disorders 0.34 0.01 8.91 0.4543

ICD_Title(N10-N16) Renal tubulo-interstitial diseases 0.75 0.23 2.65 0.6330

ICD_Title(N17-N19) Renal failure 1.56 0.54 5.22 0.4308

ICD_Title(N25-N29) Other disorders of kidney and ureter 0.34 0.04 3.01 0.2990

ICD_Title(N30-N39) Other diseases of urinary system 0.23 0.08 0.59 0.0027 **
ICD_Title(N40-N51) Diseases of male genital organs 0.42 0.15 1.19 0.0975 .
ICD_Title(N60-N64) Disorders of breast 0.04 0.02 0.09 0.0000 ***
ICD_Title(N70-N77) Inflammatory diseases of female pelvic organs 0.27 0.10 0.69 0.0065 **
ICD_Title(N80-N98) Noninflammatory disorders of female genital tract 0.42 0.18 0.97 0.0439 *
ICD_Title(O20-O29) Other maternal disorders predominantly related to pregnancy 0.17 0.01 1.88 0.1585

ICD_Title(O60-O75) Complications of labour and delivery 0.68 0.12 5.22 0.6718

ICD_Title(O85-O92) Complications predominantly related to the puerperium 0.05 0.02 0.12 0.0000 ***
ICD_Title(Q38-Q45) Other congenital malformations of the digestive system 0.60 0.23 1.66 0.3163

ICD_Title(Q50-Q56) Congenital malformations of genital organs 1.02 0.12 21.38 0.9867

ICD_Title(Q80-Q89) Other congenital malformations 0.68 0.16 3.50 0.6122

ICD_Title(Q90-Q99) Chromosomal abnormalities, not elsewhere classified 0.34 0.01 8.91 0.4543

ICD_Title(R10-R19) Symptoms and signs involving the digestive system and abdomen 0.30 0.15 0.56 0.0002 ***
ICD_Title(R20-R23) Symptoms and signs involving the skin and subcutaneous tissue 0.22 0.08 0.58 0.0029 **
ICD_Title(S30-S39) Injuries to the abdomen, lower back, lumbar spine and pelvis 1.70 0.59 5.65 0.3473

ICD_Title(S80-S89) Injuries to the knee and lower leg 0.68 0.06 15.17 0.7589

ICD_Title(T36-T50) Poisoning by drugs, medicaments and biological substances 0.07 0.01 0.29 0.0011 **
ICD_Title(T51-T65) Toxic effects of substances chiefly nonmedicinal as to source 0.04 0.01 0.16 0.0001 ***
ICD_Title(T80-T88) Complications of surgical and medical care, not elsewhere classified 1.19 0.37 4.64 0.7833

ICD_Title(W75-W84) Accidents: Other external causes of accidental injury: Other accidental threats to breathing 0.11 0.01 0.95 0.0669 .
ICD_Title(X60-X84) Intentional self-harm 0.07 0.00 0.46 0.0174 *
ICD_Title(Z00-Z13) Persons encountering health services for examination and investigation 0.34 0.01 8.91 0.4543

ICD_Title(Z40-Z54) Persons encountering health services for specific procedures and health care 1.43 0.49 4.79 0.5329

ICD_Title(Z80-Z99) Persons with potential health hazards related to family and personal history and certain conditions influencing health status 0.56 0.26 1.19 0.1327

Wald Significance
Elements Results
Chi Squared 827.8724

Degrees of Freedom 111.0000

p Value 0.0000 ***
LS0tDQp0aXRsZTogIkVEIEFuYWx5c2lzIg0KYXV0aG9yOiAiQnJhZCBTZWdhbCINCmRhdGU6ICI3LzE1LzIwMTkiDQpvdXRwdXQ6IGh0bWxfbm90ZWJvb2sNCi0tLQ0KDQpgYGB7ciBzZXR1cCwgaW5jbHVkZT1GQUxTRSwgY2FjaGU9VFJVRX0NCnJlcXVpcmUoa25pdHIpDQpyZXF1aXJlKHJlYWR4bCkNCnJlcXVpcmUodGlkeXZlcnNlKQ0KcmVxdWlyZShkcGx5cikNCnJlcXVpcmUoYW9kKQ0KcmVxdWlyZShnZ3Bsb3QyKQ0KcmVxdWlyZShwbG90bHkpDQpyZXF1aXJlKHhsc3gpDQpyZXF1aXJlKERlc2NUb29scykNCnJlcXVpcmUoUHJvcENJcykNCnJlcXVpcmUoZ2dhbGx1dmlhbCkNCnJlcXVpcmUodmNkKQ0KcmVxdWlyZShyZ2wpDQpyZXF1aXJlKHJheXNoYWRlcikNCnJlcXVpcmUobHVicmlkYXRlKQ0KcmVxdWlyZSh6b28pDQpyZXF1aXJlKHJlc2hhcGUyKQ0KcmVxdWlyZShIbWlzYykNCnJlcXVpcmUobWFncml0dHIpDQpyZXF1aXJlKHJnbHdpZGdldCkNCnJlcXVpcmUoaHRtbHRvb2xzKQ0KcmVxdWlyZShybWFya2Rvd24pDQpyZXF1aXJlKGZvcm1hdHRhYmxlKQ0Ka25pdHI6Om9wdHNfY2h1bmskc2V0KGVjaG8gPSBUUlVFKQ0Ka25pdHI6OmtuaXRfaG9va3Mkc2V0KHJnbCA9IGhvb2tfcmdsKQ0KDQpFRCA8LQ0KICByZWFkX2V4Y2VsKA0KICAgICJEOi9PbmVEcml2ZS9PbmVEcml2ZS9Eb2N1bWVudHMvTUJCQ2gvUmVzZWFyY2ggUHJvamVjdHMvQklTL0VEL1BhdGllbnQgRXh0cmFjdC1CcmFkLVBDLnhsc3giLA0KICAgIGNvbF90eXBlcyA9IGMoDQogICAgICAibnVtZXJpYyIsDQogICAgICAidGV4dCIsDQogICAgICAidGV4dCIsDQogICAgICAiZGF0ZSIsDQogICAgICAidGV4dCIsDQogICAgICAidGV4dCIsDQogICAgICAidGV4dCIsDQogICAgICAidGV4dCIsDQogICAgICAidGV4dCIsDQogICAgICAidGV4dCIsDQogICAgICAidGV4dCIsDQogICAgICAidGV4dCIsDQogICAgICAidGV4dCIsDQogICAgICAidGV4dCIsDQogICAgICAidGV4dCIsDQogICAgICAidGV4dCIsDQogICAgICAidGV4dCIsDQogICAgICAibnVtZXJpYyIsDQogICAgICAibnVtZXJpYyIsDQogICAgICAiZGF0ZSINCiAgICApDQogICkNCg0KRGlzY2hhcmdlIDwtDQogIHJlYWRfZXhjZWwoDQogICAgIkQ6L09uZURyaXZlL09uZURyaXZlL0RvY3VtZW50cy9NQkJDaC9SZXNlYXJjaCBQcm9qZWN0cy9CSVMvRUQvRnVsbCBFRCBEYXRhYmFzZS54bHN4IiwNCiAgICBzaGVldCA9ICJEaXNjaGFyZ2VSZWNvcmRzIiwNCiAgICBjb2xfdHlwZXMgPSBjKA0KICAgICAgIm51bWVyaWMiLA0KICAgICAgIm51bWVyaWMiLA0KICAgICAgInRleHQiLA0KICAgICAgInRleHQiLA0KICAgICAgInRleHQiLA0KICAgICAgInRleHQiLA0KICAgICAgInRleHQiLA0KICAgICAgInRleHQiLA0KICAgICAgInRleHQiLA0KICAgICAgIm51bWVyaWMiLA0KICAgICAgIm51bWVyaWMiLA0KICAgICAgIm51bWVyaWMiLA0KICAgICAgIm51bWVyaWMiLA0KICAgICAgIm51bWVyaWMiLA0KICAgICAgIm51bWVyaWMiLA0KICAgICAgIm51bWVyaWMiLA0KICAgICAgIm51bWVyaWMiLA0KICAgICAgIm51bWVyaWMiLA0KICAgICAgImRhdGUiLA0KICAgICAgInRleHQiLA0KICAgICAgInRleHQiLA0KICAgICAgInRleHQiLA0KICAgICAgInRleHQiLA0KICAgICAgInRleHQiLA0KICAgICAgInRleHQiLA0KICAgICAgInRleHQiLA0KICAgICAgInRleHQiLA0KICAgICAgInRleHQiLA0KICAgICAgIm51bWVyaWMiLA0KICAgICAgImRhdGUiLA0KICAgICAgInRleHQiLA0KICAgICAgInRleHQiLA0KICAgICAgInRleHQiLA0KICAgICAgInRleHQiLA0KICAgICAgInRleHQiLA0KICAgICAgImRhdGUiLA0KICAgICAgInRleHQiLA0KICAgICAgImRhdGUiLA0KICAgICAgImRhdGUiLA0KICAgICAgInRleHQiDQogICAgKQ0KICApDQpEaWFnbm9zaXMgPC0NCiAgcmVhZF9leGNlbCgNCiAgICAiRDovT25lRHJpdmUvT25lRHJpdmUvRG9jdW1lbnRzL01CQkNoL1Jlc2VhcmNoIFByb2plY3RzL0JJUy9FRC9GdWxsIEVEIERhdGFiYXNlLnhsc3giLA0KICAgIHNoZWV0ID0gIkRpYWdub3NpcyIsDQogICAgY29sX3R5cGVzID0gYygibnVtZXJpYyIsDQogICAgICAgICAgICAgICAgICAibnVtZXJpYyIsICJudW1lcmljIiwgInRleHQiKQ0KICApDQpJQ0QgPC0NCiAgcmVhZF9leGNlbCgNCiAgICAiRDovT25lRHJpdmUvT25lRHJpdmUvRG9jdW1lbnRzL01CQkNoL1Jlc2VhcmNoIFByb2plY3RzL0JJUy9FRC9GdWxsIEVEIERhdGFiYXNlLnhsc3giLA0KICAgIHNoZWV0ID0gIklDRDEwQ29kZSIsDQogICAgY29sX3R5cGVzID0gYygibnVtZXJpYyIsDQogICAgICAgICAgICAgICAgICAibnVtZXJpYyIsICJ0ZXh0IiwgInRleHQiKQ0KICApDQpJQ0RCbG9jayA8LQ0KICByZWFkX2V4Y2VsKA0KICAgICJEOi9PbmVEcml2ZS9PbmVEcml2ZS9Eb2N1bWVudHMvTUJCQ2gvUmVzZWFyY2ggUHJvamVjdHMvQklTL0VEL0Z1bGwgRUQgRGF0YWJhc2UueGxzeCIsDQogICAgc2hlZXQgPSAiSUNEMTBDb2RlQmxvY2siLA0KICAgIGNvbF90eXBlcyA9IGMoIm51bWVyaWMiLA0KICAgICAgICAgICAgICAgICAgIm51bWVyaWMiLCAidGV4dCIpDQogICkNCklDRENoYXAgPC0NCiAgcmVhZF9leGNlbCgNCiAgICAiRDovT25lRHJpdmUvT25lRHJpdmUvRG9jdW1lbnRzL01CQkNoL1Jlc2VhcmNoIFByb2plY3RzL0JJUy9FRC9GdWxsIEVEIERhdGFiYXNlLnhsc3giLA0KICAgIHNoZWV0ID0gIklDRDEwQ29kZUNoYXB0ZXIiLA0KICAgIGNvbF90eXBlcyA9IGMoIm51bWVyaWMiLA0KICAgICAgICAgICAgICAgICAgInRleHQiLCAidGV4dCIpDQogICkNCkNvbXBsaWNhdGlvbnMgPC0NCiAgcmVhZF9leGNlbCgNCiAgICAiRDovT25lRHJpdmUvT25lRHJpdmUvRG9jdW1lbnRzL01CQkNoL1Jlc2VhcmNoIFByb2plY3RzL0JJUy9FRC9GdWxsIEVEIERhdGFiYXNlLnhsc3giLA0KICAgIHNoZWV0ID0gIkNvbXBsaWNhdGlvbnMiLA0KICAgIGNvbF90eXBlcyA9IGMoDQogICAgICAibnVtZXJpYyIsDQogICAgICAibnVtZXJpYyIsDQogICAgICAibnVtZXJpYyIsDQogICAgICAiZGF0ZSIsDQogICAgICAidGV4dCIsDQogICAgICAidGV4dCIsDQogICAgICAibnVtZXJpYyINCiAgICApDQogICkNClJhZGlvbG9neSA8LQ0KICByZWFkX2V4Y2VsKA0KICAgICJEOi9PbmVEcml2ZS9PbmVEcml2ZS9Eb2N1bWVudHMvTUJCQ2gvUmVzZWFyY2ggUHJvamVjdHMvQklTL0VEL0Z1bGwgRUQgRGF0YWJhc2UueGxzeCIsDQogICAgc2hlZXQgPSAiUmFkaW9sb2dpZXMiLA0KICAgIGNvbF90eXBlcyA9IGMoIm51bWVyaWMiLA0KICAgICAgICAgICAgICAgICAgIm51bWVyaWMiLCAidGV4dCIsICJ0ZXh0IiwgImRhdGUiLA0KICAgICAgICAgICAgICAgICAgInRleHQiKQ0KICApDQpNZWRpY2F0aW9uIDwtDQogIHJlYWRfZXhjZWwoDQogICAgIkQ6L09uZURyaXZlL09uZURyaXZlL0RvY3VtZW50cy9NQkJDaC9SZXNlYXJjaCBQcm9qZWN0cy9CSVMvRUQvRnVsbCBFRCBEYXRhYmFzZS54bHN4IiwNCiAgICBzaGVldCA9ICJNZWRpY2F0aW9ucyIsDQogICAgY29sX3R5cGVzID0gYygibnVtZXJpYyIsDQogICAgICAgICAgICAgICAgICAibnVtZXJpYyIsICJ0ZXh0IiwgInRleHQiLCAidGV4dCIsDQogICAgICAgICAgICAgICAgICAidGV4dCIsICJ0ZXh0IikNCiAgKQ0KSUNVIDwtDQogIHJlYWRfZXhjZWwoDQogICAgIkQ6L09uZURyaXZlL09uZURyaXZlL0RvY3VtZW50cy9NQkJDaC9SZXNlYXJjaCBQcm9qZWN0cy9CSVMvRUQvRnVsbCBFRCBEYXRhYmFzZS54bHN4IiwNCiAgICBzaGVldCA9ICJJQ1VIaWdoQ2FyZXMiLA0KICAgIGNvbF90eXBlcyA9IGMoIm51bWVyaWMiLA0KICAgICAgICAgICAgICAgICAgIm51bWVyaWMiLCAidGV4dCIsICJkYXRlIiwgImRhdGUiLA0KICAgICAgICAgICAgICAgICAgInRleHQiKQ0KICApDQpQcm9jZWR1cmUgPC0NCiAgcmVhZF9leGNlbCgNCiAgICAiRDovT25lRHJpdmUvT25lRHJpdmUvRG9jdW1lbnRzL01CQkNoL1Jlc2VhcmNoIFByb2plY3RzL0JJUy9FRC9GdWxsIEVEIERhdGFiYXNlLnhsc3giLA0KICAgIHNoZWV0ID0gIlByb2NlZHVyZXMiLA0KICAgIGNvbF90eXBlcyA9IGMoDQogICAgICAibnVtZXJpYyIsDQogICAgICAibnVtZXJpYyIsDQogICAgICAiZGF0ZSIsDQogICAgICAidGV4dCIsDQogICAgICAidGV4dCIsDQogICAgICAidGV4dCIsDQogICAgICAidGV4dCIsDQogICAgICAidGV4dCIsDQogICAgICAidGV4dCIsDQogICAgICAibnVtZXJpYyINCiAgICApDQogICkNClByb2NDb2RlcyA8LQ0KICByZWFkX2V4Y2VsKA0KICAgICJEOi9PbmVEcml2ZS9PbmVEcml2ZS9Eb2N1bWVudHMvTUJCQ2gvUmVzZWFyY2ggUHJvamVjdHMvQklTL0VEL0Z1bGwgRUQgRGF0YWJhc2UueGxzeCIsDQogICAgc2hlZXQgPSAiUHJvY2VkdXJlQ29kZXMiLA0KICAgIGNvbF90eXBlcyA9IGMoIm51bWVyaWMiLA0KICAgICAgICAgICAgICAgICAgIm51bWVyaWMiLCAidGV4dCIsICJ0ZXh0IikNCiAgKQ0KUHJvY0NvZGVUeXBlIDwtDQogIHJlYWRfZXhjZWwoDQogICAgIkQ6L09uZURyaXZlL09uZURyaXZlL0RvY3VtZW50cy9NQkJDaC9SZXNlYXJjaCBQcm9qZWN0cy9CSVMvRUQvRnVsbCBFRCBEYXRhYmFzZS54bHN4IiwNCiAgICBzaGVldCA9ICJQcm9jZWR1cmVDb2RlVHlwZXMiLA0KICAgIGNvbF90eXBlcyA9IGMoIm51bWVyaWMiLA0KICAgICAgICAgICAgICAgICAgInRleHQiKQ0KICApDQpIaXN0b2xvZ3kgPC0NCiAgcmVhZF9leGNlbCgNCiAgICAiRDovT25lRHJpdmUvT25lRHJpdmUvRG9jdW1lbnRzL01CQkNoL1Jlc2VhcmNoIFByb2plY3RzL0JJUy9FRC9GdWxsIEVEIERhdGFiYXNlLnhsc3giLA0KICAgIHNoZWV0ID0gIkhpc3RvbG9naWVzIiwNCiAgICBjb2xfdHlwZXMgPSBjKCJudW1lcmljIiwNCiAgICAgICAgICAgICAgICAgICJudW1lcmljIiwgImRhdGUiLCAidGV4dCIsICJ0ZXh0IikNCiAgKQ0KDQojIC0tIEZ1bmN0aW9ucyAtLQ0KY29tcGxldGlvbiA8LSBmdW5jdGlvbihpbnB1dCkgew0KICB0ZXN0IDwtIGMoKQ0KICB0ZXN0X2NvdW50IDwtIGMoKQ0KICBmb3IgKHZlYyBpbiAxOmxlbmd0aChpbnB1dCkpIHsNCiAgICB2YXJfY291bnQgPC0gaW5wdXQgJT4lDQogICAgICBmaWx0ZXIoIWlzLm5hKGlucHV0W3ZlY10pIHwgaW5wdXRbdmVjXSAhPSAwKSAlPiUNCiAgICAgIGNvdW50KCkNCiAgICB0ZXN0IDwtIHJiaW5kKHRlc3QsIG5hbWVzKGlucHV0KVt2ZWNdKQ0KICAgIHRlc3RfY291bnQgPC0NCiAgICAgIHJiaW5kKHRlc3RfY291bnQsIHJvdW5kKCh2YXJfY291bnQkbiAvIGNvdW50KGlucHV0KSRuKSwgMikpDQogIH0NCiAgcmV0dXJuKGRhdGEuZnJhbWUodmFyaWFibGUgPSB0ZXN0LCBmcmFjdGlvbiA9IHRlc3RfY291bnQpKQ0KfQ0KDQpEYXRhU3VtbWFyeSA8LSBmdW5jdGlvbihpbnB1dCkgew0KICBmaXZlX251bSA8LSBmaXZlbnVtKGlucHV0KQ0KICBNZWFuIDwtIG1lYW4oaW5wdXQpDQogIFNEIDwtIHNkKGlucHV0KQ0KICB1cHBDSSA8LSBNZWFuICsgMiAqIFNEDQogIGxvd0NJIDwtIE1lYW4gLSAyICogU0QNCiAgb3V0cHV0IDwtDQogICAgZGF0YS5mcmFtZSgNCiAgICAgIE1pbiA9IGZpdmVfbnVtWzFdLA0KICAgICAgIlF1YXJ0aWxlIDEiID0gZml2ZV9udW1bMl0sDQogICAgICBNZWRpYW4gPSBmaXZlX251bVszXSwNCiAgICAgICJRdWFydGlsZSAzIiA9IGZpdmVfbnVtWzRdLA0KICAgICAgTWF4ID0gZml2ZV9udW1bNV0sDQogICAgICBJUVIgPSBmaXZlX251bVs0XSAtIGZpdmVfbnVtWzJdLA0KICAgICAgU0QsDQogICAgICBNZWFuLA0KICAgICAgJ1VwcGVyLkNJJyA9IHVwcENJLA0KICAgICAgJ0xvd2VyLkNJJyA9IGxvd0NJDQogICAgKQ0KICByZXR1cm4ob3V0cHV0KQ0KfQ0KDQptb250aF9jb21wIDwtIGZ1bmN0aW9uKGlucHV0KSB7DQogIGNvbXAgPC0gTlVMTA0KICBmb3IgKGsgaW4gMToxMikgew0KICAgIG1vbnRoIDwtIE1lcmdlZElDRCAlPiUNCiAgICAgIGZpbHRlcihhcy5udW1lcmljKGZvcm1hdChNZXJnZWRJQ0QkRW5yb2wsICclWScpKSA9PSBpbnB1dCwgYXMubnVtZXJpYyhmb3JtYXQoTWVyZ2VkSUNEJEVucm9sLCAnJW0nKSkgPT0gaykNCiAgICAjIHByaW50KG5yb3cobW9udGgpKQ0KICAgIGlmIChucm93KG1vbnRoKSA9PSAwKSB7DQogICAgICBtb250aCA8LSBjb21wbGV0aW9uKG1vbnRoKQ0KICAgICAgbW9udGggPC0gbXV0YXRlKG1vbnRoLCBmcmFjdGlvbiA9IDAuMCkNCiAgICB9IGVsc2V7DQogICAgICBtb250aCA8LSBjb21wbGV0aW9uKG1vbnRoKQ0KICAgIH0NCiAgICBtb250aCA8LSBtb250aCAlPiUNCiAgICAgIHJlbmFtZSghIXBhc3RlKGspIDo9IGZyYWN0aW9uKSAjTmV3IGV4cHJlc3Npb24gZW5hYmxlcyBuYW1pbmcgb2YgYSB2YXJpYWJsZSBieSBhIHN0cmluZw0KICAgIGlmIChrID09IDEpIHsNCiAgICAgIGNvbXAgPC0gbW9udGgNCiAgICB9IGVsc2V7DQogICAgICBjb21wIDwtIGxlZnRfam9pbihjb21wLCBtb250aCkNCiAgICB9DQogICAgI3ByaW50KGNvbXApDQogIH0NCiAgY29tcCA8LSBjb2x1bW5fdG9fcm93bmFtZXMoY29tcCwgdmFyID0gInZhcmlhYmxlIikNCiAgcmV0dXJuKGNvbXApDQp9DQoNCiNDYWxjdWxhdGUgOTUlIENJcyBmcm9tIEV0aG5pY2l0aWVzIOKGkiBFeHRyYWN0cyBWYXJpYWJsZXMgJiBUaXRsZXMgZnJvbSBUYWJsZSBTdW1tYXJ5DQojSW5wdXQgaXMgQXJyYXkgRmlsdGVyZWQgb24gRmllbGQgb2YgSW50ZXJlc3QNCk11bHRpX0NJIDwtIGZ1bmN0aW9uKGlucHV0KSB7DQogIENJIDwtIGRhdGEuZnJhbWUoRmllbGRzID0gbmFtZXModGFibGUoaW5wdXQpKSwNCiAgICAgICAgICAgICBNdWx0aW5vbUNJKA0KICAgICAgICAgICAgICAgYXMudmVjdG9yKHRhYmxlKGlucHV0KSksDQogICAgICAgICAgICAgICBjb25mLmxldmVsID0gMC45NSwNCiAgICAgICAgICAgICAgIG1ldGhvZCA9ICJzaXNvbmdsYXoiDQogICAgICAgICAgICAgKSkNCiAgQ0kkZXN0IDwtIHJvdW5kKENJJGVzdCoxMDAsIDIpDQogIENJJGx3ci5jaSA8LSByb3VuZChDSSRsd3IuY2kqMTAwLCAyKQ0KICBDSSR1cHIuY2kgPC0gcm91bmQoQ0kkdXByLmNpKjEwMCwgMikNCiAgQ0kgPC1DSSAlPiUNCiAgICByZW5hbWUoIlBlcmNlbnRhZ2UgKCUpIiA9ICJlc3QiLCAiTG93ZXIgOTUlIENJIiA9IGx3ci5jaSwgIlVwcGVyIDk1JSBDSSIgPSB1cHIuY2kpDQogIHJldHVybihDSSkNCn0NCg0KDQphZ2VfZ3JvdXBzIDwtIGZ1bmN0aW9uKGlucHV0KSB7DQogIGdyb3VwIDwtICIiDQogIGlmIChpbnB1dCA8IDIpIHsNCiAgICBncm91cCA8LSAiSW5mYW50Ig0KICB9DQogIGlmIChpbnB1dCA+PSAyICYmIGlucHV0IDwgNikgew0KICAgIGdyb3VwIDwtICJQcmVzY2hvb2wgQ2hpbGQiDQogIH0NCiAgaWYgKGlucHV0ID49IDYgJiYgaW5wdXQgPCAxMykgew0KICAgIGdyb3VwIDwtICJDaGlsZCINCiAgfQ0KICBpZiAoaW5wdXQgPj0gMTMgJiYgaW5wdXQgPCAxOSkgew0KICAgIGdyb3VwIDwtICJBZG9sZXNjZW50Ig0KICB9DQogIGlmIChpbnB1dCA+PSAxOSAmJiBpbnB1dCA8IDI1KSB7DQogICAgZ3JvdXAgPC0gIllvdW5nIEFkdWx0Ig0KICB9DQogIGlmIChpbnB1dCA+PSAyNSAmJiBpbnB1dCA8IDQ1KSB7DQogICAgZ3JvdXAgPC0gIkFkdWx0Ig0KICB9DQogIGlmIChpbnB1dCA+PSA0NSAmJiBpbnB1dCA8IDY1KSB7DQogICAgZ3JvdXAgPC0gIk1pZGRsZSBBZ2VkIg0KICB9DQogIGlmIChpbnB1dCA+PSA2NSAmJiBpbnB1dCA8IDgwKSB7DQogICAgZ3JvdXAgPC0gIkFnZWQiDQogIH0NCiAgaWYgKGlucHV0ID49IDgwKSB7DQogICAgZ3JvdXAgPC0gIjgwKyINCiAgfQ0KICByZXR1cm4oZ3JvdXApDQp9DQoNCmFnZV9saXN0IDwtIGMoDQogICJJbmZhbnQiLA0KICAiUHJlc2Nob29sIENoaWxkIiwNCiAgIkNoaWxkIiwNCiAgIkFkb2xlc2NlbnQiLA0KICAiWW91bmcgQWR1bHQiLA0KICAiQWR1bHQiLA0KICAiTWlkZGxlIEFnZWQiLA0KICAiQWdlZCIsDQogICI4MCsiDQopDQoNCm91dGxpZXJUZXN0IDwtIGZ1bmN0aW9uKHZhbElucHV0LCBzdW1tYXJ5SW5wdXQpIHsNCiAgb3V0bGllciA8LSBjKCkNCiAgZm9yICh2ZWMgaW4gdmFsSW5wdXQpIHsNCiAgICBpZiAodmVjID4gKHN1bW1hcnlJbnB1dCRRdWFydGlsZS4zICsgMS41ICogc3VtbWFyeUlucHV0JElRUikgfA0KICAgICAgICB2ZWMgPCAoc3VtbWFyeUlucHV0JFF1YXJ0aWxlLjEgLSAxLjUgKiBzdW1tYXJ5SW5wdXQkSVFSKSkgew0KICAgICAgb3V0bGllciA8LSByYmluZChvdXRsaWVyLCBUUlVFKQ0KICAgIH0gZWxzZXsNCiAgICAgIG91dGxpZXIgPC0gcmJpbmQob3V0bGllciwgRkFMU0UpDQogICAgfQ0KICB9DQogIHJldHVybihvdXRsaWVyKQ0KfQ0KDQpTdW1tYXJ5X1RhYmxlIDwtIGZ1bmN0aW9uKGlucHV0KXsNCiAgZnVsbF9zdW0gPC0gYXMuZGF0YS5mcmFtZSh0KERhdGFTdW1tYXJ5KGlucHV0KSkpICU+JQ0KICAgIHJlbmFtZShWYWx1ZXMgPSBWMSkgJT4lDQogICAgcm91bmQoMikgJT4lDQogICAgcm93bmFtZXNfdG9fY29sdW1uKHZhciA9ICJTdW1tYXJ5IikgDQogIGZ1bGxfc3VtWzksMV0gPC0gIlVwcGVyIDk1JSBDSSINCiAgZnVsbF9zdW1bMTAsMV0gPC0gIkxvd2VyIDk1JSBDSSINCiAgDQogIGZvcm1hdHRhYmxlKA0KICAgIGZ1bGxfc3VtLA0KICAgIGFsaWduID0gYygibCIsIHJlcCgiciIsIE5DT0woZnVsbF9zdW0pIC0gMSkpLA0KICAgIGxpc3QoDQogICAgICAiU3VtbWFyeSIgPSBmb3JtYXR0ZXIoInNwYW4iLCBzdHlsZSA9IH4gc3R5bGUoDQogICAgICAgIGNvbG9yID0gIkdyZXkiLCBmb250LndlaWdodCA9ICJib2xkIg0KICAgICAgKSksIGBWYWx1ZXNgID0gY29sb3JfdGlsZSgiI2FjZGVlZiIsICIjYmZmZmZmIikNCiAgICApDQogICkNCn0NCg0KbnVsbF90b19uaWwgPC0gZnVuY3Rpb24oaW5wdXQpew0KICBvdXRwdXQgPC0gaW5wdXQNCiAgaWYoaXMubmEoaW5wdXQpIHwgaXMubnVsbChpbnB1dCkpew0KICAgIGlmKGlzLmNoYXJhY3RlcihpbnB1dCkpew0KICAgICAgb3V0cHV0IDwtICJOb25lIg0KICAgIH0NCiAgICBpZihpcy5udW1lcmljKGlucHV0KSl7DQogICAgICBvdXRwdXQgPC0gMA0KICAgIH0NCiAgfQ0KICByZXR1cm4ob3V0cHV0KQ0KfQ0KDQpjcm9zc190YWIgPC0gZnVuY3Rpb24oeF9pbnB1dCwgeV9pbnB1dCl7DQogIGNvbG9yX2lmZWxzZSA8LSBmdW5jdGlvbiguLi4pIHsNCiAgICBmb3JtYXR0ZXIoInNwYW4iLA0KICAgICAgICAgICAgICBzdHlsZSA9IGZ1bmN0aW9uKHgpIHN0eWxlKA0KICAgICAgICAgICAgICAgIGRpc3BsYXkgPSAiYmxvY2siLA0KICAgICAgICAgICAgICAgIHBhZGRpbmcgPSAiMCA0cHgiLA0KICAgICAgICAgICAgICAgICJib3JkZXItcmFkaXVzIiA9ICI0cHgiLA0KICAgICAgICAgICAgICAgICJiYWNrZ3JvdW5kLWNvbG9yIiA9IGlmZWxzZSh4ID4gMCwgY3NzY29sb3IoZ3JhZGllbnQoYXMubnVtZXJpYyh4KSwgLi4uKSksIHJlZF92YWwpKSkNCiAgfQ0KICBjVGFibGUgPC0gYXMuZGF0YS5mcmFtZS5tYXRyaXgodGFibGUoeF9pbnB1dCwgeV9pbnB1dCkpICU+JQ0KICAgIHJvd25hbWVzX3RvX2NvbHVtbigiRmllbGRzIikgJT4lDQogICAgcmVuYW1lKCI1IG9yIExlc3MiID0gIjAiLCAiTW9yZSB0aGFuIDUiID0gIjEiKSAlPiUNCiAgICBmb3JtYXR0YWJsZShhbGlnbiA9IGMoImwiLCByZXAoInIiLCBOQ09MKC4pIC0gMSkpLA0KICAgICAgICAgICAgICAgIGxpc3QoDQogICAgICAgICAgICAgICAgICBgRmllbGRzYCA9IGZvcm1hdHRlcigic3BhbiIsIHN0eWxlID0gfiBzdHlsZSgNCiAgICAgICAgICAgICAgICAgICAgY29sb3IgPSAiZ3JleSIsIGZvbnQud2VpZ2h0ID0gImJvbGQiDQogICAgICAgICAgICAgICAgICApKSwgDQogICAgICAgICAgICAgICAgICBhcmVhKGNvbCA9IGMoIjUgb3IgTGVzcyIsICJNb3JlIHRoYW4gNSIpKSB+IGNvbG9yX3RpbGUyKGdyZWVuX21pbiwgZ3JlZW5fbWF4KQ0KICAgICAgICAgICAgICAgICkpDQogIHJldHVybihjVGFibGUpDQp9DQoNCmZpbHRlcl9uaWwgPC0gZnVuY3Rpb24oaW5wdXQpIHsNCiAgZmlsdGVyX2xpc3QgPC0NCiAgICBhcy5kYXRhLmZyYW1lLm1hdHJpeCh0YWJsZShpbnB1dCwgTWVyZ2VkX01lZCRMT1NfT3V0Y29tZSkpICU+JQ0KICAgIHJvd25hbWVzX3RvX2NvbHVtbigiRmllbGRzIikgJT4lDQogICAgZmlsdGVyICguJCIwIiA9PSAwIHwgLiQiMSIgPT0gMCkgJT4lDQogICAgc2VsZWN0KEZpZWxkcykNCiAgcmV0dXJuKGZpbHRlcl9saXN0WywxXSkNCn0NCg0KcmVncmVzc190YWJsZSA8LSBmdW5jdGlvbihpbnB1dCkgew0KICBwVmFsRXZhbCA8LSBmdW5jdGlvbih4KSB7DQogICAgdmFsdWUgPC0gIiINCiAgICBpZiAoeCA8IDAuMSkgew0KICAgICAgdmFsdWUgPC0gIi4iDQogICAgfQ0KICAgIGlmICh4IDwgMC4wNSkgew0KICAgICAgdmFsdWUgPC0gIioiDQogICAgfQ0KICAgIGlmICh4IDwgMC4wMSkgew0KICAgICAgdmFsdWUgPC0gIioqIg0KICAgIH0NCiAgICBpZiAoeCA8IDAuMDAxKSB7DQogICAgICB2YWx1ZSA8LSAiKioqIg0KICAgIH0NCiAgICByZXR1cm4odmFsdWUpDQogIH0NCiAgaW5wdXQkT1IgPC0gcm91bmQoZXhwKGlucHV0JE9SKSwgMikNCiAgaW5wdXQkIjIuNSAlIiA8LSByb3VuZChleHAoaW5wdXQkIjIuNSAlIiksIDIpDQogIGlucHV0JCI5Ny41ICUiIDwtIHJvdW5kKGV4cChpbnB1dCQiOTcuNSAlIiksIDIpDQogIGlucHV0IDwtIGlucHV0ICU+JQ0KICAgIHJvd25hbWVzX3RvX2NvbHVtbigiVmFyaWFibGUiKSAlPiUNCiAgICByZW5hbWUoIjIuNSUiID0gIjIuNSAlIikgJT4lDQogICAgcmVuYW1lKCI5Ny41JSIgPSAiOTcuNSAlIikgJT4lDQogICAgcmVuYW1lKCJwIFZhbCIgPSAicCIpDQogIGlucHV0WywgIiAiXSA8LSBOQQ0KICBmb3JtYXR0YWJsZShpbnB1dCwNCiAgICAgICAgICAgICAgYWxpZ24gPSBjKCJsIiwgcmVwKCJyIiwgTkNPTChpbnB1dCkgLSAxKSksDQogICAgICAgICAgICAgIGxpc3QoDQogICAgICAgICAgICAgICAgYFZhcmlhYmxlYCA9IGZvcm1hdHRlcigic3BhbiIsIHN0eWxlID0gfiBzdHlsZSgNCiAgICAgICAgICAgICAgICAgIGNvbG9yID0gImdyZXkiLCBmb250LndlaWdodCA9ICJib2xkIg0KICAgICAgICAgICAgICAgICkpLA0KICAgICAgICAgICAgICAgIGAgYCA9IGZvcm1hdHRlcigNCiAgICAgICAgICAgICAgICAgICJzcGFuIiwNCiAgICAgICAgICAgICAgICAgIHN0eWxlID0gfiBzdHlsZShjb2xvciA9IGlmZWxzZShgcCBWYWxgIDwgMC4wNSwgIiIsICIiKSksDQogICAgICAgICAgICAgICAgICB+IGljb250ZXh0KA0KICAgICAgICAgICAgICAgICAgICBpZmVsc2UoYHAgVmFsYCA8IDAuMDUsICIiLCAiIiksDQogICAgICAgICAgICAgICAgICAgIHNhcHBseShgcCBWYWxgLCBmdW5jdGlvbih4KQ0KICAgICAgICAgICAgICAgICAgICAgIHBWYWxFdmFsKHgpKQ0KICAgICAgICAgICAgICAgICAgKQ0KICAgICAgICAgICAgICAgICkNCiAgICAgICAgICAgICAgKSkNCn0NCg0Kd2FsZF90YWJsZSA8LSBmdW5jdGlvbihpbnB1dCkgew0KICBwVmFsRXZhbCA8LSBmdW5jdGlvbih4KSB7DQogICAgdmFsdWUgPC0gIiINCiAgICBpZiAoeCA8IDAuMSkgew0KICAgICAgdmFsdWUgPC0gIi4iDQogICAgfQ0KICAgIGlmICh4IDwgMC4wNSkgew0KICAgICAgdmFsdWUgPC0gIioiDQogICAgfQ0KICAgIGlmICh4IDwgMC4wMSkgew0KICAgICAgdmFsdWUgPC0gIioqIg0KICAgIH0NCiAgICBpZiAoeCA8IDAuMDAxKSB7DQogICAgICB2YWx1ZSA8LSAiKioqIg0KICAgIH0NCiAgICByZXR1cm4odmFsdWUpDQogIH0NCiAgV1Rlc3RGcmFtZSA8LSBhcy5kYXRhLmZyYW1lKGlucHV0JHJlc3VsdCRjaGkyKSAlPiUNCiAgICByZW5hbWUoIlJlc3VsdHMiID0gImlucHV0JHJlc3VsdCRjaGkyIikNCiAgcm93bmFtZXMoV1Rlc3RGcmFtZSlbcm93bmFtZXMoV1Rlc3RGcmFtZSkgPT0gImNoaTIiXSA8LQ0KICAgICJDaGkgU3F1YXJlZCINCiAgcm93bmFtZXMoV1Rlc3RGcmFtZSlbcm93bmFtZXMoV1Rlc3RGcmFtZSkgPT0gImRmIl0gPC0NCiAgICAiRGVncmVlcyBvZiBGcmVlZG9tIg0KICByb3duYW1lcyhXVGVzdEZyYW1lKVtyb3duYW1lcyhXVGVzdEZyYW1lKSA9PSAiUCJdIDwtICJwIFZhbHVlIg0KICBXVGVzdEZyYW1lIDwtIHJvd25hbWVzX3RvX2NvbHVtbihXVGVzdEZyYW1lLCAiRWxlbWVudHMiKQ0KICBXVGVzdEZyYW1lWywgIiAiXSA8LSBOQQ0KICBmb3JtYXR0YWJsZShXVGVzdEZyYW1lLA0KICAgICAgICAgICAgICBhbGlnbiA9IGMoImwiLCByZXAoInIiLCBOQ09MKFdUZXN0RnJhbWUpIC0gMSkpLA0KICAgICAgICAgICAgICBsaXN0KA0KICAgICAgICAgICAgICAgIGBFbGVtZW50c2AgPSBmb3JtYXR0ZXIoInNwYW4iLCBzdHlsZSA9IH4gc3R5bGUoDQogICAgICAgICAgICAgICAgICBjb2xvciA9ICJncmV5IiwgZm9udC53ZWlnaHQgPSAiYm9sZCINCiAgICAgICAgICAgICAgICApKSwNCiAgICAgICAgICAgICAgICBgIGAgPSBmb3JtYXR0ZXIoDQogICAgICAgICAgICAgICAgICAic3BhbiIsDQogICAgICAgICAgICAgICAgICBzdHlsZSA9IH4gc3R5bGUoY29sb3IgPSBpZmVsc2UoYEVsZW1lbnRzYCA9PSAicCBWYWx1ZSIsICIiLCAiIikpLA0KICAgICAgICAgICAgICAgICAgfiBpY29udGV4dCgNCiAgICAgICAgICAgICAgICAgICAgaWZlbHNlKGBFbGVtZW50c2AgPT0gInAgVmFsdWUiLCAiIiwgIiIpLA0KICAgICAgICAgICAgICAgICAgICBpZmVsc2UoDQogICAgICAgICAgICAgICAgICAgICAgYEVsZW1lbnRzYCA9PSAicCBWYWx1ZSIsDQogICAgICAgICAgICAgICAgICAgICAgc2FwcGx5KGBSZXN1bHRzYCwgZnVuY3Rpb24oeCkNCiAgICAgICAgICAgICAgICAgICAgICAgIHBWYWxFdmFsKHgpKSwNCiAgICAgICAgICAgICAgICAgICAgICAiIg0KICAgICAgICAgICAgICAgICAgICApDQogICAgICAgICAgICAgICAgICApDQogICAgICAgICAgICAgICAgKQ0KICAgICAgICAgICAgICApKQ0KfQ0KDQpncmVlbl9taW4gPC0gIiNlN2ZmZWUiDQpncmVlbl9tYXggPC0gIiM0YWI3NmMiDQpyZWRfdmFsIDwtICIjZTAzZTY5Ig0KYGBgDQojIyMjIFRoaXMgaXMgYW4gZXZvbHZpbmcgYW5hbHlzaXMgb2YgdGhlIEVsZWN0cm9uaWMgU3VyZ2ljYWwgRGlzY2hhcmdlIERhdGFzZXQNCg0KIyMgQ29tcGxldGlvbiBBbmFseXNpcw0KYGBge3IgRUQsIGVjaG89RkFMU0V9DQpFRCA8LSAgRUQgJT4lDQogIHJvd3dpc2UoKSAlPiUNCiAgbXV0YXRlKEFnZV9Hcm91cCA9IGFnZV9ncm91cHMoYWdlKSkNCg0KRUQkQWdlX0dyb3VwIDwtIG9yZGVyZWQoDQogIEVEJEFnZV9Hcm91cCwNCiAgbGV2ZWxzID0gYWdlX2xpc3QNCikNCnN1cHByZXNzTWVzc2FnZXMoDQpNZXJnZWRJQ0QgPC0gbGVmdF9qb2luKHggPSBEaXNjaGFyZ2UsIHkgPSBEaWFnbm9zaXMpICU+JQ0KICBsZWZ0X2pvaW4oeCA9IC4sIHkgPSBJQ0QpICU+JQ0KICBsZWZ0X2pvaW4oeCA9IC4sIHkgPSBJQ0RCbG9jaykgJT4lDQogIGxlZnRfam9pbih4ID0gLiwgeSA9IElDRENoYXApICU+JQ0KICBsZWZ0X2pvaW4oeCA9IC4sIHkgPSBFRCkNCikNCg0KY291bnRfdGFibGUgPC0gY29tcGxldGlvbihNZXJnZWRJQ0QpDQoNCmNvbXBsZXRpb25fcGxvdCA8LQ0KICBnZ3Bsb3QoZGF0YSA9IGNvdW50X3RhYmxlKSArIGdlb21fY29sKG1hcHBpbmcgPSBhZXMoeCA9IHZhcmlhYmxlLCB5ID0gZnJhY3Rpb24pLCBmaWxsID0gJ2RvZGdlcmJsdWUnKSArDQogIGxhYnModGl0bGUgPSAiUmVjb3JkIENvbXBsZXRpb24gRnJhY3Rpb24iLCB4ID0gIlJlY29yZHMiLCB5ID0gIkNvbXBsZXRpb24gRnJhY3Rpb24iKSArIGNvb3JkX2ZsaXAoKSArIHRoZW1lKHBhbmVsLmJhY2tncm91bmQgPSBlbGVtZW50X3JlY3QoZmlsbCA9ICJ3aGl0ZSIsIGNvbG91ciA9ICJibGFjayIpKQ0KYGBgDQojIyMgT3ZlcmFsbCBDb21wbGV0aW9uIEZyYWN0aW9uDQpgciBnZ3Bsb3RseShjb21wbGV0aW9uX3Bsb3QsIGhlaWdodCA9IDEwMDApYA0KDQojIyBQYXRpZW50IFNlYXJjaGluZw0KIyMjIERpc3RyaWJ1dGlvbiBvZiBDb21tb24gTGFzdCBOYW1lcw0KYGBge3IgU2VhcmNoLCBlY2hvPUZBTFNFLCBmaWcuYWxpZ24gPSAiY2VudGVyIn0NCkxhc3RfQ291bnQgPC0gYXMuZGF0YS5mcmFtZSh0YWJsZShFRCRsYXN0TmFtZSkpDQoNCkxhc3RfQm94IDwtIExhc3RfQ291bnQgJT4lDQogIGZpbHRlcihGcmVxID4gMTApICU+JQ0KICBzZWxlY3QoRnJlcSkgJT4lDQogIGJveHBsb3QoDQogICAgLiwNCiAgICBtYWluID0gIkRpc3RyaWJ1dGlvbiBvZiBMYXN0IE5hbWVzIGFwcGVhcmluZyBtb3JlIHRoYW4gMTAgdGltZXMgaW4gRUQiLA0KICAgIHhsYWIgPSAiRnJlcXVlbmN5IiwNCiAgICB5bGFiID0gIkxhc3QgTmFtZXMiLA0KICAgIGNvbCA9ICJyZWQiLA0KICAgIGJvcmRlciA9ICJibGFjayIsDQogICAgaG9yaXpvbnRhbCA9IFRSVUUsDQogICAgbm90Y2ggPSBGQUxTRQ0KICApDQoNCkxhc3RfU3RyaXAgPC1MYXN0X0NvdW50ICU+JQ0KICBmaWx0ZXIoRnJlcSA+IDEwKSAlPiUNCiAgc2VsZWN0KEZyZXEpICU+JQ0KICBzdHJpcGNoYXJ0KA0KICAgIC4sDQogICAgeGxhYiA9ICJGcmVxdWVuY3kiLA0KICAgIHlsYWIgPSAiTGFzdCBOYW1lcyIsDQogICAgbWV0aG9kID0gImppdHRlciIsDQogICAgY29sID0gImJsYWNrIg0KICApDQpgYGANCiMjIyBMYXN0IE5hbWUgRnJlcXVlbmN5DQpgYGB7ciBTZWFyY2ggMiwgZWNobz1GQUxTRSwgZmlnLmFsaWduID0gImNlbnRlciJ9DQoNCmhpc3QoTGFzdF9Db3VudCRGcmVxLCBtYWluID0gIkhpc3RvZ3JhbSBvZiBMYXN0IE5hbWVzIiwgeGxhYiA9ICJMYXN0IE5hbWUgT2NjdXJlbmNlIikNCg0KTGFzdF9Db3VudCRGcmVxICU+JQ0KICB0YWJsZSgpICU+JQ0KICBhcy52ZWN0b3IoKSAlPiUNCiAgY3Vtc3VtKCkgJT4lDQogIGJhcnBsb3QoKQ0KYGBgDQoNCmBgYHtyIFNlYXJjaCAzLCBlY2hvPUZBTFNFfQ0KI0dyb3VwaW5nIGJ5IEZ1bGwgU3VybmFtZSAmIEZ1bGwgTmFtZQ0KY291bnRfbmFtZXMgIDwtIEVEICU+JQ0KICB1bmdyb3VwKCkgJT4lDQogIGdyb3VwX2J5KGxhc3ROYW1lLCBmaXJzdE5hbWUpICU+JQ0KICBjb3VudCgpICU+JQ0KICByZW5hbWUoQ291bnQgPSBuKQ0KDQojR3JvdXBpbmcgYnkgRnVsbCBTdXJuYW1lICYgRmlyc3QgSW5pdGlhbA0KY291bnRfaW5pdGlhbCA8LSBFRCAlPiUNCiAgbXV0YXRlKGluaXRpYWxzID0gc3Vic3RyKGZpcnN0TmFtZSwgc3RhcnQgPSAxLCBzdG9wID0gMSkpICU+JQ0KICB1bmdyb3VwKCkgJT4lDQogIGdyb3VwX2J5KGxhc3ROYW1lLCBpbml0aWFscykgJT4lDQogIGNvdW50KCkgJT4lDQogIHJlbmFtZShDb3VudCA9IG4pDQoNCmZ1bGxfdGFiIDwtIFN1bW1hcnlfVGFibGUoY291bnRfbmFtZXMkQ291bnQpDQppbml0aWFsX3RhYiA8LSBTdW1tYXJ5X1RhYmxlKGNvdW50X2luaXRpYWwkQ291bnQpDQpgYGANCiMjIyBGdWxsIEZpcnN0IE5hbWUgJiBMYXN0IE5hbWUgU2VhcmNoDQpgciBmdWxsX3RhYmANCiMjIyBGaXJzdCBJbml0aWFsICYgTGFzdCBOYW1lIFNlYXJjaA0KYHIgaW5pdGlhbF90YWJgDQoNCiMjIERlbW9ncmFwaGljIEFuYWx5c2lzDQpgYGB7ciBEZW1vZ3JhcGhpYywgZWNobz1GQUxTRX0NCiNEZW1vZ3JhcGhpYyBHcm91cGluZw0KRXRobmljaXR5X0JhciA8LSAgDQogIGdncGxvdChFRCwgYWVzKHggPSBldGhuaWNpdHkpKSArIGdlb21fYmFyKGZpbGwgPSAncmVkJykgKyBnZW9tX3RleHQoDQogICAgc3RhdCA9ICdjb3VudCcsDQogICAgYWVzKGxhYmVsID0gLi5jb3VudC4uKSwNCiAgICB2anVzdCA9IC0wLjMsDQogICAgc2l6ZSA9IDMuNQ0KICApICsNCiAgbGFicygNCiAgICB0aXRsZSA9IHBhc3RlKA0KICAgICAgIkRpc3RyaWJ1dGlvbiBvZiBFdGhuaWNpdGllcyBpbiBFRCAobiA9ICIsDQogICAgICBucm93KEVEKSwNCiAgICAgICIpIiwNCiAgICAgIHNlcCA9ICIiDQogICAgKSwNCiAgICB5ID0gIkNvdW50IiwNCiAgICB4ID0gIkV0aG5pY2l0aWVzIg0KICApICsgdGhlbWUoDQogICAgcGFuZWwuYmFja2dyb3VuZCA9IGVsZW1lbnRfcmVjdChmaWxsID0gIndoaXRlIiwgY29sb3VyID0gImJsYWNrIikNCiAgKQ0KDQpHZW5kZXJfQmFyIDwtDQogIGdncGxvdChFRCwgYWVzKHggPSBnZW5kZXIpKSArIGdlb21fYmFyKGZpbGwgPSAncmVkJykgKyBnZW9tX3RleHQoDQogICAgc3RhdCA9ICdjb3VudCcsDQogICAgYWVzKGxhYmVsID0gLi5jb3VudC4uKSwNCiAgICB2anVzdCA9IC0wLjMsDQogICAgc2l6ZSA9IDMuNQ0KICApICsNCiAgbGFicygNCiAgICB0aXRsZSA9IHBhc3RlKA0KICAgICAgIkRpc3RyaWJ1dGlvbiBvZiBTZXggaW4gRUQgKG4gPSAiLA0KICAgICAgbnJvdyhFRCksDQogICAgICAiKSIsDQogICAgICBzZXAgPSAiIg0KICAgICksDQogICAgeSA9ICJDb3VudCIsDQogICAgeCA9ICJTZXgiDQogICkgKyB0aGVtZSgNCiAgICBwYW5lbC5iYWNrZ3JvdW5kID0gZWxlbWVudF9yZWN0KGZpbGwgPSAid2hpdGUiLCBjb2xvdXIgPSAiYmxhY2siKQ0KICApDQoNCkV0aG5pY2l0eV9HZW5kZXIgPC0gZ2dwbG90KEVELCBhZXMoeCA9IGV0aG5pY2l0eSwgZmlsbCA9IGdlbmRlcikpICsgZ2VvbV9iYXIocG9zaXRpb24gPSAiZG9kZ2UiKSArDQogICAgbGFicygNCiAgICAgIHRpdGxlID0gIkV0aG5pY2l0eSAmIEdlbmRlciBEaXZpc2lvbnMiLA0KICAgICAgeCA9ICJFdGhuaWNpdGllcyIsDQogICAgICB5ID0gIkNvdW50IiwNCiAgICAgIGZpbGwgPSAiR2VuZGVyIg0KKSsgdGhlbWUoDQogIHBhbmVsLmJhY2tncm91bmQgPSBlbGVtZW50X3JlY3QoZmlsbCA9ICJ3aGl0ZSIsIGNvbG91ciA9ICJibGFjayIpDQopDQoNCkFnZV9CYXIgPC0NCiAgZ2dwbG90KEVELCBhZXMoeCA9IEFnZV9Hcm91cCkpICsgZ2VvbV9iYXIoZmlsbCA9ICdyZWQnKSArIGdlb21fdGV4dCgNCiAgICBzdGF0ID0gJ2NvdW50JywNCiAgICBhZXMobGFiZWwgPSAuLmNvdW50Li4pLA0KICAgIHZqdXN0ID0gLTAuMywNCiAgICBzaXplID0gMy41DQogICkgKw0KICBsYWJzKA0KICAgIHRpdGxlID0gcGFzdGUoDQogICAgICAiRGlzdHJpYnV0aW9uIG9mIEFnZSBHcm91cHMgaW4gRUQgKG4gPSAiLA0KICAgICAgbnJvdyhFRCksDQogICAgICAiKSIsDQogICAgICBzZXAgPSAiIg0KICAgICksDQogICAgeSA9ICJDb3VudCIsDQogICAgeCA9ICJBZ2UgR3JvdXBzIg0KICApICsgdGhlbWUoDQogICAgcGFuZWwuYmFja2dyb3VuZCA9IGVsZW1lbnRfcmVjdChmaWxsID0gIndoaXRlIiwgY29sb3VyID0gImJsYWNrIikNCiAgKSArIGNvb3JkX2ZsaXAoKQ0KDQpSYWNlX0NJIDwtIE11bHRpX0NJKEVEJGV0aG5pY2l0eSkgJT4lDQogIHJlbmFtZSgiRXRobmljaXR5IiA9IEZpZWxkcykNClJhY2VfVGFiIDwtIGZvcm1hdHRhYmxlKA0KICBSYWNlX0NJLA0KICBhbGlnbiA9IGMoImwiLCByZXAoInIiLCBOQ09MKFJhY2VfQ0kpIC0gMSkpLA0KICBsaXN0KA0KICAgICJFdGhuaWNpdHkiID0gZm9ybWF0dGVyKCJzcGFuIiwgc3R5bGUgPSB+IHN0eWxlKA0KICAgICAgY29sb3IgPSAiR3JleSIsIGZvbnQud2VpZ2h0ID0gImJvbGQiDQogICAgKSksDQogICAgIlBlcmNlbnRhZ2UgKCUpIiA9IGNvbG9yX3RpbGUoZ3JlZW5fbWluLCBncmVlbl9tYXgpDQogICkNCikNCg0KR2VuZGVyX0NJIDwtIE11bHRpX0NJKEVEJGdlbmRlcikgJT4lDQogIHJlbmFtZSgiR2VuZGVyIiA9IEZpZWxkcykNCkdlbmRlcl9UYWIgPC0gZm9ybWF0dGFibGUoDQogIEdlbmRlcl9DSSwNCiAgYWxpZ24gPSBjKCJsIiwgcmVwKCJyIiwgTkNPTChHZW5kZXJfQ0kpIC0gMSkpLA0KICBsaXN0KA0KICAgICJHZW5kZXIiID0gZm9ybWF0dGVyKCJzcGFuIiwgc3R5bGUgPSB+IHN0eWxlKA0KICAgICAgY29sb3IgPSAiR3JleSIsIGZvbnQud2VpZ2h0ID0gImJvbGQiDQogICAgKSksDQogICAgIlBlcmNlbnRhZ2UgKCUpIiA9IGNvbG9yX3RpbGUoZ3JlZW5fbWluLCBncmVlbl9tYXgpDQogICkNCikNCg0KQWdlX0NJIDwtIE11bHRpX0NJKEVEJEFnZV9Hcm91cCkgJT4lDQogIHJlbmFtZSgiQWdlIEdyb3VwIiA9IEZpZWxkcykNCkFnZV9UYWIgPC0gZm9ybWF0dGFibGUoDQogIEFnZV9DSSwNCiAgYWxpZ24gPSBjKCJsIiwgcmVwKCJyIiwgTkNPTChBZ2VfQ0kpIC0gMSkpLA0KICBsaXN0KA0KICAgICJBZ2UgR3JvdXAiID0gZm9ybWF0dGVyKCJzcGFuIiwgc3R5bGUgPSB+IHN0eWxlKA0KICAgICAgY29sb3IgPSAiR3JleSIsIGZvbnQud2VpZ2h0ID0gImJvbGQiDQogICAgKSksDQogICAgIlBlcmNlbnRhZ2UgKCUpIiA9IGNvbG9yX3RpbGUoZ3JlZW5fbWluLCBncmVlbl9tYXgpDQogICkNCikNCmBgYA0KIyMjIEV0aG5pY2l0eSANCmByIGdncGxvdGx5KEV0aG5pY2l0eV9CYXIpYA0KYHIgUmFjZV9UYWJgDQojIyMgU2V4DQpgciBnZ3Bsb3RseShHZW5kZXJfQmFyKWANCmByIEdlbmRlcl9UYWJgIA0KDQpgciBnZ3Bsb3RseShFdGhuaWNpdHlfR2VuZGVyKWANCg0KIyMjIEFnZSBHcm91cA0KYHIgZ2dwbG90bHkoQWdlX0JhcilgDQpgciBBZ2VfVGFiYA0KDQojIyBMZW5ndGggb2YgU3RheSBBbmFseXNpcw0KYGBge3IgTGVuZ3RoIG9mIFN0YXksIGVjaG89RkFMU0UsIGZpZy5hbGlnbiA9ICJjZW50ZXIifQ0KI0xlbmd0aCBvZiBTdGF5IEFuYWx5c2lzDQpMT1NUYWIgPC0gRGlzY2hhcmdlICU+JQ0KICBmaWx0ZXIoZGlzY2hhcmdlRGF0ZSA+IGFzLkRhdGUoIjIwMTYvMTEvMDEiKSwNCiAgICAgICAgIGRhdGVPZkFkbWlzc2lvbiA+IGFzLkRhdGUoIjIwMTYvMTEvMDEiKSkgJT4lDQogIG11dGF0ZSgNCiAgICBNb250aCA9IG1vbnRoKHN0YXJ0VGltZSksDQogICAgWWVhciA9IHllYXIoc3RhcnRUaW1lKSwNCiAgICBMT1MgPSBhcy5udW1lcmljKGFzLkRhdGUoZGlzY2hhcmdlRGF0ZSkgLSBhcy5EYXRlKGRhdGVPZkFkbWlzc2lvbikgKyAxKQ0KICApICU+JQ0KICBmaWx0ZXIoTE9TID49IDApDQoNCkxPU1RhYiAlPiUNCiAgc2VsZWN0KExPUykgJT4lDQogIGJveHBsb3QoDQogICAgLiwNCiAgICBtYWluID0gcGFzdGUoIkRpc3RyaWJ1dGlvbiBvZiBMZW5ndGggb2YgU3RheSAoTE9TKSAobiA9ICIsIG5yb3coTE9TVGFiKSwgIikiLCBzZXAgPQ0KICAgICAgICAgICAgICAgICAgICIiKSwNCiAgICB4bGFiID0gIkRheXMiLA0KICAgIHlsYWIgPSAiTE9TIiwNCiAgICBjb2wgPSAicmVkIiwNCiAgICBib3JkZXIgPSAiYmxhY2siLA0KICAgIGhvcml6b250YWwgPSBUUlVFLA0KICAgIG5vdGNoID0gRkFMU0UNCiAgKQ0KDQpMT1NUYWIgJT4lDQogIHNlbGVjdChMT1MpICU+JQ0KICBzdHJpcGNoYXJ0KA0KICAgIC4sDQogICAgeGxhYiA9ICJEYXlzIiwNCiAgICB5bGFiID0gIkxPUyIsDQogICAgbWV0aG9kID0gImppdHRlciIsDQogICAgY29sID0gImJsYWNrIg0KICApDQpgYGANCg0KYGBge3IgTGVuZ3RoIG9mIFN0YXkgMiwgZWNobz1GQUxTRX0NCkxPU1N1bW1hcnkgPC0gRGF0YVN1bW1hcnkoTE9TVGFiJExPUykNCm91dGxpZXIgPC0gIHJvdW5kKDEwMCAqIG5yb3coZmlsdGVyKExPU1RhYiwgb3V0bGllclRlc3QoTE9TLCBMT1NTdW1tYXJ5KSkpIC8gbnJvdyhMT1NUYWIpLCAyKQ0KYGBgDQpgIGByIG91dGxpZXJgJSBgIG9mIHBhdGllbnQncyB3ZXJlIGFzc2Vzc2VkIHRvIGhhdmUgb3V0bGllciBsZW5ndGggb2Ygc3RheXMuIFRoaXMgd2FzIGFzc2Vzc2VkIGJ5IG1lYW5zIG9mIGEgY3V0b2ZmIG9mICQxLjUqSVFSJCBiZWxvdyB0aGUgZmlyc3QgYW5kIGFib3ZlIHRoZSB0aGlyZCBxdWFydGlsZS4NCg0KYGBge3IgTGVuZ3RoIG9mIFN0YXkgMywgaW5jbHVkZT1GQUxTRX0NCmRlbnNQbG90IDwtIHNlbGVjdChMT1NUYWIsIGRpc2NoYXJnZURhdGUsIGRhdGVPZkFkbWlzc2lvbiwgTE9TKSAlPiUNCiAgZmlsdGVyKExPUyA+PSAwKSAlPiUNCiAgZmlsdGVyKCFvdXRsaWVyVGVzdChMT1MsIExPU1N1bW1hcnkpKSAlPiUNCiAgZ2dwbG90KGFlcyh4ID0gZGlzY2hhcmdlRGF0ZSwgeSA9IExPUykpICsgZ2VvbV9oZXgoYmlucyA9IDIwLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplID0gMC41LA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xvdXIgPSAiYmxhY2siKSArIHNjYWxlX2ZpbGxfdmlyaWRpc19jKG9wdGlvbiA9ICJEIikgKw0KICBsYWJzKHkgPSAiTGVuZ3RoIG9mIFN0YXkiLA0KICAgICAgIHggPSAiRGF0ZSIsDQogICAgICAgZmlsbCA9ICJDb3VudCIpICsNCiAgdGhlbWUobGVnZW5kLnBvc2l0aW9uID0gIm5vbmUiKQ0KDQpwbG90X2dnKA0KICBkZW5zUGxvdCwNCiAgbXVsdGljb3JlID0gVFJVRSwNCiAgd2lkdGggPSA3LA0KICBoZWlnaHQgPSA3LA0KICB3aW5kb3dzaXplID0gYygxNDAwLDg2NiksDQogIG9mZnNldF9lZGdlcyA9IFRSVUUsDQogIHNjYWxlID0gMzAwLA0KICBzdW5hbmdsZT0yMjUNCiAgKQ0KcmVuZGVyX2NhbWVyYSgNCiAgZm92ID0gNzAsDQogIHpvb20gPSAwLjY1LA0KICBwaGkgPSAzMCwNCiAgdGhldGEgPSAzMzANCiAgKQ0KDQojIGRlbnMzZCA8LSBzY2VuZTNkKCkNCiMgcmdsLmNsb3NlKCkNCiMgcmdsd2lkZ2V0KGRlbnMzZCkNCg0KZGVuc1Bsb3QgPC0gc2VsZWN0KExPU1RhYiwgZGlzY2hhcmdlRGF0ZSwgZGF0ZU9mQWRtaXNzaW9uLCBMT1MpICU+JQ0KICBmaWx0ZXIoTE9TID49IDApICU+JQ0KICBmaWx0ZXIoIW91dGxpZXJUZXN0KExPUywgTE9TU3VtbWFyeSkpICU+JQ0KICBnZ3Bsb3QoYWVzKHggPSBkaXNjaGFyZ2VEYXRlLCB5ID0gTE9TKSkgKyBnZW9tX2hleChiaW5zID0gMjAsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemUgPSAwLjUsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbG91ciA9ICJibGFjayIpICsgc2NhbGVfZmlsbF92aXJpZGlzX2Mob3B0aW9uID0gIkQiKSArDQogIGxhYnModGl0bGUgPSAiTGVuZ3RoIG9mIFN0YXkgcGVyIFBhdGllbnQgd2l0aG91dCBPdXRsaWVycyIsDQogICAgICAgeSA9ICJMZW5ndGggb2YgU3RheSIsDQogICAgICAgeCA9ICJEYXRlIiwNCiAgICAgICBmaWxsID0gIkNvdW50IikgKyB0aGVtZShwYW5lbC5iYWNrZ3JvdW5kID0gZWxlbWVudF9yZWN0KGZpbGwgPSAid2hpdGUiLCBjb2xvdXIgPSAiYmxhY2siKQ0KICApDQpkZW5zX2hleCA8LSBnZ3Bsb3RseShkZW5zUGxvdCkNCg0KDQpgYGANCiMjIyBQYXRpZW50IGxlbmd0aCBvZiBzdGF5IGRlbnNpdHkgdmlzdWFsaXphdGlvbg0KM0QgUGxvdA0KYGBge3IgTGVuZ3RoIG9mIFN0YXkgMyAtIDNEIFBsb3QsIGVjaG89RkFMU0UsIGNhY2hlPVRSVUUsIGZpZy5hbGlnbiA9ICJjZW50ZXIifQ0KcmVuZGVyX3NuYXBzaG90KGNsZWFyID0gVFJVRSkNCnJnbC5jbG9zZSgpDQpgYGANCjJEIFBsb3QNCmBgYHtyIExlbmd0aCBvZiBTdGF5IDMgLSAyRCBQbG90LCBlY2hvPUZBTFNFLCBjYWNoZT1UUlVFLCBmaWcuYWxpZ24gPSAiY2VudGVyIiwgZmlnLmhlaWdodD0gNX0NCmRlbnNfaGV4DQpgYGANCg0KYGBge3IgTGVuZ3RoIG9mIFN0YXkgNCwgZWNobz1GQUxTRX0NCnN1cHByZXNzTWVzc2FnZXMoDQpMT1NBZ2UgPC0gbGVmdF9qb2luKExPU1RhYiwgRUQpICU+JQ0KICBmaWx0ZXIoTE9TID49IDApICU+JQ0KICByb3d3aXNlKCkgJT4lDQogIG11dGF0ZShBZ2VfR3JvdXAgPSBhZ2VfZ3JvdXBzKGFnZSkpDQopDQoNCkxPU0FnZSRBZ2VfR3JvdXAgPC0NCiAgb3JkZXJlZChMT1NBZ2UkQWdlX0dyb3VwLA0KICAgICAgICAgIGxldmVscyA9IGFnZV9saXN0KQ0KDQpncm91cF9MT1MgPC0gZ2dwbG90KExPU0FnZSwgYWVzKHggPSBBZ2VfR3JvdXAsIHkgPSBMT1MpKQ0KDQpncm91cF9MT1NfQm94IDwtIGdyb3VwX0xPUyArIGdlb21fYm94cGxvdChmaWxsID0gJ2RvZGdlcmJsdWUnKSArDQogIGxhYnModGl0bGUgPSAiTGVuZ3RoIG9mIFN0YXkgcGVyIFBhdGllbnQgQWdlIEdyb3VwIiwNCiAgICAgICB5ID0gIkxlbmd0aCBvZiBTdGF5IChEYXlzKSIsDQogICAgICAgeCA9ICJBZ2UgR3JvdXAiKSArIGNvb3JkX2NhcnRlc2lhbih5bGltID0gYygwLCAzMCkpICsgDQogIHRoZW1lKHBhbmVsLmJhY2tncm91bmQgPSBlbGVtZW50X3JlY3QoZmlsbCA9ICJ3aGl0ZSIsIGNvbG91ciA9ICJibGFjayIpKQ0KDQpncm91cF9MT1NfRGVuc2l0eSA8LQ0KICBncm91cF9MT1MgKyBnZW9tX3Zpb2xpbihmaWxsID0gJ2RvZGdlcmJsdWUnLCB0cmltID0gRkFMU0UpICsgc3RhdF9zdW1tYXJ5KA0KICAgIGZ1bi55ID0gbWVkaWFuLA0KICAgIGdlb20gPSAicG9pbnQiLA0KICAgIHNpemUgPSAxLA0KICAgIGNvbG9yID0gImJsYWNrIg0KICApICsNCiAgbGFicyh0aXRsZSA9ICJMZW5ndGggb2YgU3RheSBwZXIgUGF0aWVudCBBZ2UgR3JvdXAiLA0KICAgICAgIHkgPSAiTGVuZ3RoIG9mIFN0YXkgKERheXMpIiwNCiAgICAgICB4ID0gIkFnZSBHcm91cCIpICsgY29vcmRfY2FydGVzaWFuKHlsaW0gPSBjKDAsIDUwKSkgKyANCiAgdGhlbWUocGFuZWwuYmFja2dyb3VuZCA9IGVsZW1lbnRfcmVjdChmaWxsID0gIndoaXRlIiwgY29sb3VyID0gImJsYWNrIikpDQoNCmFnZV9MT1MgPC0gZ2dwbG90KExPU0FnZSwgYWVzKHggPSBhZ2UsIHkgPSBMT1MpKSArIGdlb21fc21vb3RoKCkgKw0KICBsYWJzKHRpdGxlID0gIkxlbmd0aCBvZiBTdGF5IHZzIFBhdGllbnQgQWdlIiwNCiAgICAgICB5ID0gIkxlbmd0aCBvZiBTdGF5IChEYXlzKSIsDQogICAgICAgeCA9ICJBZ2UiKSArIGNvb3JkX2NhcnRlc2lhbih5bGltID0gYygwLCAxMi41KSwgeGxpbSA9IGMoMCwgMTAwKSkgKyANCiAgdGhlbWUocGFuZWwuYmFja2dyb3VuZCA9IGVsZW1lbnRfcmVjdChmaWxsID0gIndoaXRlIiwgY29sb3VyID0gImJsYWNrIikNCiAgICAgICAgKQ0KYGBgDQojIyMgTGVuZ3RoIG9mIFN0YXkgYnkgQWdlIEdyb3VwDQpgciBnZ3Bsb3RseShncm91cF9MT1NfQm94KWANCmByIGdncGxvdGx5KGdyb3VwX0xPU19EZW5zaXR5KWANCmByIGdncGxvdGx5KGFnZV9MT1MpYA0KDQpgYGB7ciBJQ0QsIGVjaG89RkFMU0V9DQpzdXBwcmVzc01lc3NhZ2VzKA0KQWdlSUNEIDwtIGxlZnRfam9pbih4ID0gTE9TQWdlLCB5ID0gRGlhZ25vc2lzKSAlPiUNCiAgbGVmdF9qb2luKHggPSAuLCB5ID0gSUNEKSAlPiUNCiAgbGVmdF9qb2luKHggPSAuLCB5ID0gSUNEQmxvY2spICU+JQ0KICBsZWZ0X2pvaW4oeCA9IC4sIHkgPSBJQ0RDaGFwKQ0KKQ0KDQpBZ2VJQ0QkSUNEX0NoYXB0ZXJfU2hvcnQgPC0NCiAgb3JkZXJlZChBZ2VJQ0QkSUNEX0NoYXB0ZXJfU2hvcnQsIGxldmVscyA9IElDRENoYXAkSUNEX0NoYXB0ZXJfU2hvcnQpDQoNCkNoYXBfQ0kgPC0gTXVsdGlfQ0koQWdlSUNEJElDRF9DaGFwdGVyX1Nob3J0KSAlPiUNCiAgcmVuYW1lKCJJQ0QgQ2hhcHRlciIgPSBGaWVsZHMpDQpDaGFwX1RhYiA8LSBmb3JtYXR0YWJsZSgNCiAgQ2hhcF9DSSwNCiAgYWxpZ24gPSBjKCJsIiwgcmVwKCJyIiwgTkNPTChDaGFwX0NJKSAtIDEpKSwNCiAgbGlzdCgNCiAgICAiSUNEIENoYXB0ZXIiID0gZm9ybWF0dGVyKCJzcGFuIiwgc3R5bGUgPSB+IHN0eWxlKA0KICAgICAgY29sb3IgPSAiR3JleSIsIGZvbnQud2VpZ2h0ID0gImJvbGQiDQogICAgKSksDQogICAgIlBlcmNlbnRhZ2UgKCUpIiA9IGNvbG9yX3RpbGUoZ3JlZW5fbWluLCBncmVlbl9tYXgpDQogICkNCikNCg0KI0Z1bGwgSUNEIENoYXB0ZXIgQnJlYWtkb3duDQpGdWxsX0lDRF9IaXN0byA8LQ0KICBnZ3Bsb3QoQWdlSUNELCBhZXMoeCA9IElDRF9DaGFwdGVyX1Nob3J0KSkgKyBnZW9tX2JhcihmaWxsID0gJ3JlZCcpICsgZ2VvbV90ZXh0KA0KICAgIHN0YXQgPSAnY291bnQnLA0KICAgIGFlcyhsYWJlbCA9IC4uY291bnQuLiksDQogICAgdmp1c3QgPSAtMC4zLA0KICAgIHNpemUgPSAzLjUNCiAgKSArDQogIGxhYnMoDQogICAgdGl0bGUgPSBwYXN0ZSgiSUNEIENoYXB0ZXIgQnJlYWtkb3duIChuID0gIiwgbnJvdyhBZ2VJQ0QpLCAiKSIsIHNlcCA9ICIiKSwNCiAgICB5ID0gIkNvdW50IiwNCiAgICB4ID0gIklDRCBDaGFwdGVyIg0KICApICsgdGhlbWUoDQogICAgYXhpcy50ZXh0LnggPSBlbGVtZW50X3RleHQoYW5nbGUgPSA0NSwgaGp1c3QgPSAxKSwNCiAgICBwYW5lbC5iYWNrZ3JvdW5kID0gZWxlbWVudF9yZWN0KGZpbGwgPSAid2hpdGUiLCBjb2xvdXIgPSAiYmxhY2siKQ0KICApDQoNCkZ1bGxfSUNEX0NoYXAgPC0gZ2dwbG90KEFnZUlDRCwgYWVzKA0KICB4ID0gSUNEX0NoYXB0ZXJfU2hvcnQsDQogIHkgPSBMT1MNCikpDQoNCkZ1bGxfSUNEX0JveCA8LSBGdWxsX0lDRF9DaGFwICsgZ2VvbV9ib3hwbG90KGZpbGwgPSAnZG9kZ2VyYmx1ZScpICsNCiAgbGFicygNCiAgICB0aXRsZSA9ICJMZW5ndGggb2YgU3RheSBwZXIgSUNEIENoYXB0ZXIiLA0KICAgIHN1YnRpdGxlID0gIkFycmFuZ2VkIGJ5IG1lZGlhbiIsDQogICAgeSA9ICJMZW5ndGggb2YgU3RheSAoRGF5cykiLA0KICAgIHggPSAiSUNEIENoYXB0ZXIiDQogICkgKyBjb29yZF9jYXJ0ZXNpYW4oeWxpbSA9IGMoMCwgNDApKSArIHRoZW1lKA0KICAgIGF4aXMudGV4dC54ID0gZWxlbWVudF90ZXh0KGFuZ2xlID0gNDUsIGhqdXN0ID0gMSksDQogICAgcGFuZWwuYmFja2dyb3VuZCA9IGVsZW1lbnRfcmVjdChmaWxsID0gIndoaXRlIiwgY29sb3VyID0gImJsYWNrIikNCiAgKQ0KDQpGdWxsX0lDRF9EZW5zaXR5IDwtDQogIEZ1bGxfSUNEX0NoYXAgICsgZ2VvbV92aW9saW4oZmlsbCA9ICdkb2RnZXJibHVlJywgdHJpbSA9IEZBTFNFKSArIHN0YXRfc3VtbWFyeSgNCiAgICBmdW4ueSA9IG1lZGlhbiwNCiAgICBnZW9tID0gInBvaW50IiwNCiAgICBzaXplID0gMSwNCiAgICBjb2xvciA9ICJibGFjayINCiAgKSArDQogIGxhYnMoDQogICAgdGl0bGUgPSAiTGVuZ3RoIG9mIFN0YXkgcGVyIElDRCBDaGFwdGVyIiwNCiAgICBzdWJ0aXRsZSA9ICJBcnJhbmdlZCBieSBtZWRpYW4iLA0KICAgIHkgPSAiTGVuZ3RoIG9mIFN0YXkgKERheXMpIiwNCiAgICB4ID0gIklDRCBDaGFwdGVyIg0KICApICsgY29vcmRfY2FydGVzaWFuKHlsaW0gPSBjKDAsIDQwKSkgKyB0aGVtZSgNCiAgICBheGlzLnRleHQueCA9IGVsZW1lbnRfdGV4dChhbmdsZSA9IDQ1LCBoanVzdCA9IDEpLA0KICAgIHBhbmVsLmJhY2tncm91bmQgPSBlbGVtZW50X3JlY3QoZmlsbCA9ICJ3aGl0ZSIsIGNvbG91ciA9ICJibGFjayIpDQogICkNCg0KI1RvcCBUZW4gQnJlYWtkb3duDQp0b3BfdGVuX0NoYXAgPC0gQWdlSUNEICU+JQ0KICBzZWxlY3QoSUNEX0NoYXB0ZXJfU2hvcnQpICU+JQ0KICB0YWJsZSgpICU+JQ0KICBhcy5kYXRhLmZyYW1lKCkgJT4lDQogIGFycmFuZ2UoZGVzYyhGcmVxKSkgJT4lDQogIHRvcF9uKC4sIDEwLCBGcmVxKSAlPiUNCiAgc2VsZWN0KCIuIikNCg0KdG9wX3Rlbl9BZ2VJQ0QgPC0gQWdlSUNEICU+JQ0KICByb3d3aXNlKCkgJT4lDQogIGZpbHRlcihJQ0RfQ2hhcHRlcl9TaG9ydCAlaW4lIHRvcF90ZW5fQ2hhcCQuKQ0KDQpUb3BfQ2hhcF9CYXIgPC0NCiAgZ2dwbG90KHRvcF90ZW5fQWdlSUNELCBhZXMoeCA9IGZjdF9yZW9yZGVyKElDRF9DaGFwdGVyX1Nob3J0LCBMT1MsIC5mdW4gPSBtZWRpYW4sIC5kZXNjID0gVFJVRSkpKSArIGdlb21fYmFyKGZpbGwgPSAncmVkJykgKyBnZW9tX3RleHQoDQogICAgc3RhdCA9ICdjb3VudCcsDQogICAgYWVzKGxhYmVsID0gLi5jb3VudC4uKSwNCiAgICB2anVzdCA9IC0wLjMsDQogICAgc2l6ZSA9IDMuNQ0KICApICsNCiAgbGFicygNCiAgICB0aXRsZSA9IHBhc3RlKA0KICAgICAgIlRvcCAxMCBJQ0QgQ2hhcHRlciBCcmVha2Rvd24gKG4gPSAiLA0KICAgICAgbnJvdyh0b3BfdGVuX0FnZUlDRCksDQogICAgICAiKSIsDQogICAgICBzZXAgPSAiIg0KICAgICksDQogICAgeSA9ICJDb3VudCIsDQogICAgeCA9ICJJQ0QgQ2hhcHRlciINCiAgKSArIHRoZW1lKA0KICAgIGF4aXMudGV4dC54ID0gZWxlbWVudF90ZXh0KGFuZ2xlID0gNDUsIGhqdXN0ID0gMSksDQogICAgcGFuZWwuYmFja2dyb3VuZCA9IGVsZW1lbnRfcmVjdChmaWxsID0gIndoaXRlIiwgY29sb3VyID0gImJsYWNrIikNCiAgKQ0KDQpUb3BfSUNEUGxvdCA8LQ0KICBnZ3Bsb3QodG9wX3Rlbl9BZ2VJQ0QsIGFlcygNCiAgICB4ID0gZmN0X3Jlb3JkZXIoSUNEX0NoYXB0ZXJfU2hvcnQsIExPUywgLmZ1biA9IG1lZGlhbiwgLmRlc2MgPSBUUlVFKSwNCiAgICB5ID0gTE9TDQogICkpDQoNClRvcF9JQ0RfQm94IDwtIFRvcF9JQ0RQbG90ICsgZ2VvbV9ib3hwbG90KGZpbGwgPSAnZG9kZ2VyYmx1ZScpICsNCiAgbGFicygNCiAgICB0aXRsZSA9ICJMZW5ndGggb2Ygc3RheSBwZXIgSUNEIGNoYXB0ZXIiLA0KICAgIHN1YnRpdGxlID0gIkJveHBsb3RzIG9mIHRoZSAxMCBtb3N0IGNvbW1vbiBjaGFwdGVycyBhcnJhbmdlZCBieSBtZWRpYW4iLA0KICAgIHkgPSAiTGVuZ3RoIG9mIHN0YXkgKERheXMpIiwNCiAgICB4ID0gIklDRCBjaGFwdGVyIg0KICApICsgY29vcmRfY2FydGVzaWFuKHlsaW0gPSBjKDAsIDQwKSkgKyB0aGVtZSgNCiAgICBheGlzLnRleHQueCA9IGVsZW1lbnRfdGV4dChhbmdsZSA9IDQ1LCBoanVzdCA9IDEpLA0KICAgIHBhbmVsLmJhY2tncm91bmQgPSBlbGVtZW50X3JlY3QoZmlsbCA9ICJ3aGl0ZSIsIGNvbG91ciA9ICJibGFjayIpDQogICkNCg0KVG9wX0lDRF9WaW9saW4gPC0NCiAgVG9wX0lDRFBsb3QgKyBnZW9tX3Zpb2xpbihmaWxsID0gJ2RvZGdlcmJsdWUnLCB0cmltID0gRkFMU0UpICsgc3RhdF9zdW1tYXJ5KA0KICAgIGZ1bi55ID0gbWVkaWFuLA0KICAgIGdlb20gPSAicG9pbnQiLA0KICAgIHNpemUgPSAyLA0KICAgIGNvbG9yID0gImJsYWNrIg0KICApICsNCiAgbGFicygNCiAgICB0aXRsZSA9ICJMZW5ndGggb2Ygc3RheSBwZXIgSUNEIGNoYXB0ZXIiLA0KICAgIHN1YnRpdGxlID0gIkRlbnNpdHkgcGxvdHMgb2YgdGhlIDEwIG1vc3QgY29tbW9uIGNoYXB0ZXJzIGFycmFuZ2VkIGJ5IG1lZGlhbiIsDQogICAgeSA9ICJMZW5ndGggb2Ygc3RheSAoRGF5cykiLA0KICAgIHggPSAiSUNEIGNoYXB0ZXIiDQogICkgKyBjb29yZF9jYXJ0ZXNpYW4oeWxpbSA9IGMoMCwgNDApKSArIHRoZW1lKA0KICAgIGF4aXMudGV4dC54ID0gZWxlbWVudF90ZXh0KGFuZ2xlID0gNDUsIGhqdXN0ID0gMSksDQogICAgcGFuZWwuYmFja2dyb3VuZCA9IGVsZW1lbnRfcmVjdChmaWxsID0gIndoaXRlIiwgY29sb3VyID0gImJsYWNrIikNCiAgKQ0KYGBgDQoNCiMjIElDRCBBbmFseXNpcw0KYHIgQ2hhcF9UYWJgDQoNCiMjIyBGdWxsIERhdGFzZXQNCmByIGdncGxvdGx5KEZ1bGxfSUNEX0hpc3RvKWANCmByIGdncGxvdGx5KEZ1bGxfSUNEX0JveClgDQpgciBnZ3Bsb3RseShGdWxsX0lDRF9EZW5zaXR5KWANCg0KIyMjIFRvcCBUZW4gQ29kZXMNCmByIGdncGxvdGx5KFRvcF9DaGFwX0JhcilgDQpgciBnZ3Bsb3RseShUb3BfSUNEX0JveClgDQpgciBnZ3Bsb3RseShUb3BfSUNEX1Zpb2xpbilgDQoNCiMjIyBEZW1vZ3JhcGhpYyBJQ0QgRmxvdw0KYGBge3IgSUNEMiwgZWNobz1GQUxTRX0NCk1lcmdlZE1vZCA8LSANCiAgTWVyZ2VkSUNEICU+JQ0KICByb3d3aXNlKCkgJT4lDQogIG11dGF0ZShBZ2VfR3JvdXAgPSBhZ2VfZ3JvdXBzKGFnZSkpICU+JQ0KICBmaWx0ZXIoZ2VuZGVyICE9ICJPdGhlciIpICU+JQ0KICB1bmdyb3VwKCkgJT4lDQogIGdyb3VwX2J5KGdlbmRlciwgZXRobmljaXR5LCBBZ2VfR3JvdXAsIElDRF9UaXRsZSkgJT4lDQogIGNvdW50KCkNCg0KTWVyZ2VkTW9kJEFnZV9Hcm91cCA8LQ0KICBvcmRlcmVkKE1lcmdlZE1vZCRBZ2VfR3JvdXAsDQogICAgICAgICAgbGV2ZWxzID0gYWdlX2xpc3QpDQoNCkFsbHV2X0NvZGUgPC0gTWVyZ2VkTW9kICU+JQ0KICBmaWx0ZXIobiA+IDEwMCkgJT4lDQogIGdncGxvdChhZXMoDQogICAgYXhpczEgPSBnZW5kZXIsDQogICAgYXhpczIgPSBBZ2VfR3JvdXAsDQogICAgYXhpczMgPSBJQ0RfVGl0bGUsDQogICAgeSA9IG4NCiAgKSkgKyBnZW9tX2FsbHV2aXVtKGFlcyhmaWxsID0gZ2VuZGVyLCBjb2xvdXIgPSBnZW5kZXIpKSArIGdlb21fc3RyYXR1bSgpICsNCiAgZ2VvbV90ZXh0KA0KICAgIHN0YXQgPSAic3RyYXR1bSIsDQogICAgbGFiZWwuc3RyYXRhID0gVFJVRSwNCiAgICBzaXplID0gMywNCiAgICBsYWJlbCA9IGMoDQogICAgICAiTWFsZSIsDQogICAgICAiRmVtYWxlIiwNCiAgICAgICJBZ2VkIiwNCiAgICAgICJNaWRkbGUgQWdlZCIsDQogICAgICAiQWR1bHQiLA0KICAgICAgIkFkb2xlc2NlbnQiLA0KICAgICAgIlNraW4gJiBTdWJjdXQgSW5mZWN0aW9ucyIsDQogICAgICAiR2FsbGJsYWRkZXIsXG5CaWxpYXJ5IFRyYWN0XG4mIFBhbmNyZWFzIiwNCiAgICAgICJPdGhlciBJbnRlc3RpbmFsIiwNCiAgICAgICJIZXJuaWEiLA0KICAgICAgIkFwcGVuZGl4IiwNCiAgICAgICJPZXNvcGhhZ3VzLFxuU3RvbWFjaCAmIERlb2RlbnVtIiwNCiAgICAgICJCcmVhc3QgTmVvcGxhc20iLA0KICAgICAgIkRpZ2VzdGl2ZVxuTmVvcGxhc20iLA0KICAgICAgIk4vQSINCiAgICApDQogICkgKw0KICBzY2FsZV94X2Rpc2NyZXRlKGxpbWl0cyA9IGMoIlNleCIsICJBZ2UgR3JvdXAiLCAiSUNEIEJsb2NrIiksDQogICAgICAgICAgICAgICAgICAgZXhwYW5kID0gYygwLjEsIDAuMSkpICsgdGhlbWVfbWluaW1hbCgpICsgdGhlbWUobGVnZW5kLnBvc2l0aW9uID0gIm5vbmUiLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF4aXMudGV4dC54ID0gZWxlbWVudF90ZXh0KGZhY2UgPSAiYm9sZCIpKSArDQogIGxhYnMoDQogICAgdGl0bGUgPSBwYXN0ZSgiR2VuZXJhbCBJQ0QxMCBDb2RlIEJyZWFrZG93biAobj0iLCBucm93KEVEKSwgIikiLCBzZXAgPSAiIiksDQogICAgc3VidGl0bGUgPSAiU3RyYXRpZmllZCBieSBTZXgsIEFnZSBHcm91cCAmIElDRCBDb2RlIiwNCiAgICB5ID0gIkZyZXF1ZW5jeSINCiAgKQ0KDQpNZXJnZWRNb2QyIDwtDQogIE1lcmdlZElDRCAlPiUgI0dlbmVyYXRlcyBNZXJnZWQgTGlzdCBvZiBQYXRpZW50cyBvbiBTZXgsIEFnZSBHcm91cCAmIElDRCBDaGFwdGVyDQogIHJvd3dpc2UoKSAlPiUNCiAgbXV0YXRlKEFnZV9Hcm91cCA9IGFnZV9ncm91cHMoYWdlKSkgJT4lDQogIGZpbHRlcihnZW5kZXIgIT0gIk90aGVyIikgJT4lDQogIHVuZ3JvdXAoKSAlPiUNCiAgZ3JvdXBfYnkoZ2VuZGVyLCBldGhuaWNpdHksIEFnZV9Hcm91cCwgSUNEX0NoYXB0ZXIpICU+JQ0KICBjb3VudCgpDQoNCk1lcmdlZE1vZDIkQWdlX0dyb3VwIDwtDQogIG9yZGVyZWQoDQogICAgTWVyZ2VkTW9kMiRBZ2VfR3JvdXAsDQogICAgbGV2ZWxzID0gYWdlX2xpc3QNCiAgKQ0KDQpBbGx1dl9DaGFwIDwtIE1lcmdlZE1vZDIgJT4lDQogIGZpbHRlcihuID4gMTAwKSAlPiUNCiAgZ2dwbG90KGFlcygNCiAgICBheGlzMSA9IGdlbmRlciwNCiAgICBheGlzMiA9IEFnZV9Hcm91cCwNCiAgICBheGlzMyA9IElDRF9DaGFwdGVyLA0KICAgIHkgPSBuDQogICkpICsgZ2VvbV9hbGx1dml1bShhZXMoZmlsbCA9IGdlbmRlciwgY29sb3VyID0gZ2VuZGVyKSkgKyBnZW9tX3N0cmF0dW0oKSArDQogIGdlb21fdGV4dCgNCiAgICBzdGF0ID0gInN0cmF0dW0iLA0KICAgIGxhYmVsLnN0cmF0YSA9IFRSVUUsDQogICAgc2l6ZSA9IDQsDQogICAgbGFiZWwgPSBjKA0KICAgICAgIk1hbGUiLA0KICAgICAgIkZlbWFsZSIsDQogICAgICAiQWdlZCIsDQogICAgICAiTWlkZGxlIEFnZWQiLA0KICAgICAgIkFkdWx0IiwNCiAgICAgICJZb3VuZyBBZHVsdCIsDQogICAgICAiQWRvbGVzY2VudCIsDQogICAgICAiR2VuaXRvdXJpbmFyeSBTeXN0ZW0iLA0KICAgICAgIlNraW4gJiBTdWJjdXQgVGlzc3VlIiwNCiAgICAgICJEaWdlc3RpdmUgU3lzdGVtIiwNCiAgICAgICJDaXJjdWxhdG9yeSBTeXN0ZW0iLA0KICAgICAgIk5lb3BsYXNtcyIsDQogICAgICAiTi9BIg0KICAgICkNCiAgKSArDQogIHNjYWxlX3hfZGlzY3JldGUobGltaXRzID0gYygiU2V4IiwgIkFnZSBHcm91cCIsICJJQ0QgQ2hhcHRlciIpLA0KICAgICAgICAgICAgICAgICAgIGV4cGFuZCA9IGMoMC4xLCAwLjEpKSArIHRoZW1lX21pbmltYWwoKSArIHRoZW1lKGxlZ2VuZC5wb3NpdGlvbiA9ICJub25lIiwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBheGlzLnRleHQueCA9IGVsZW1lbnRfdGV4dChmYWNlID0gImJvbGQiKSkgKw0KICBsYWJzKA0KICAgIHRpdGxlID0gcGFzdGUoIkdlbmVyYWwgSUNEMTAgQ2hhcHRlciBCcmVha2Rvd24gKG49IiwgbnJvdyhFRCksICIpIiwgc2VwID0gIiIpLA0KICAgIHN1YnRpdGxlID0gIlN0cmF0aWZpZWQgYnkgU2V4LCBBZ2UgR3JvdXAgJiBJQ0QgQ2hhcHRlciIsDQogICAgeSA9ICJGcmVxdWVuY3kiDQogICkNCmBgYA0KDQojIyMjIElDRCBDaGFwdGVyIFNhbmtleSBGbG93DQpgYGB7ciBJQ0QyIC0gQWxsdXYxLCBlY2hvPUZBTFNFLCBmaWcuaGVpZ2h0ID0gMTAsIGZpZy53aWR0aCA9IDE1fQ0KQWxsdXZfQ2hhcA0KYGBgDQoNCiMjIyMgSUNEIENvZGUgU2Fua2V5IEZsb3cNCmBgYHtyIElDRDIgLSBBbGx1djIsIGVjaG89RkFMU0UsIGZpZy5oZWlnaHQgPSAxMCwgZmlnLndpZHRoID0gMTV9DQpBbGx1dl9Db2RlDQpgYGANCmBgYHtyIExPUywgZWNobz1GQUxTRX0NCg0KSGlzdG9fQ291bnQgPC0gc2VwYXJhdGVfcm93cyhIaXN0b2xvZ3ksIDQgLCBzZXAgPSAiLyIpICU+JQ0KICBzZXBhcmF0ZV9yb3dzKDQgLCBzZXAgPSAiYW5kIikgJT4lDQogIHNlcGFyYXRlX3Jvd3MoNCAsIHNlcCA9ICJBTkQiKSAlPiUNCiAgc2VwYXJhdGVfcm93cyg0ICwgc2VwID0gIiYiKSAlPiUNCiAgc2VwYXJhdGVfcm93cyg0ICwgc2VwID0gIiwiKSAlPiUNCiAgc2VwYXJhdGVfcm93cyg0ICwgc2VwID0gIiArICIpICU+JQ0KICBzZXBhcmF0ZV9yb3dzKDQgLCBzZXAgPSAiOyIpICU+JQ0KICByb3d3aXNlKCkgJT4lDQogIGZpbHRlcihzcGVjaW1lbk51bWJlciAhPSAibmlsIiAmJiBzcGVjaW1lbk51bWJlciAhPSAiTmlsIiAmJiAhaXMubnVsbChzcGVjaW1lbk51bWJlcikgJiYgDQogICAgICAgICAgICFpcy5uYShzcGVjaW1lbk51bWJlcikgJiYgc3BlY2ltZW5OdW1iZXIgIT0gIiIgJiYgc3BlY2ltZW5OdW1iZXIgIT0gIj8/IiAmJiBzcGVjaW1lbk51bWJlciAhPSAiPyIpICAlPiUNCiAgdW5ncm91cCgpICU+JQ0KICBncm91cF9ieShwcm9jZWR1cmVJZCkgJT4lDQogIGNvdW50KCkgJT4lDQogIHJlbmFtZSgiSGlzdG9fbiIgPSBuKQ0KDQpNZWRpY2F0aW9uX0NvdW50IDwtIE1lZGljYXRpb24gJT4lDQogIGdyb3VwX2J5KGRpc2NoYXJnZVJlY29yZElkKSAlPiUNCiAgY291bnQoKSAlPiUNCiAgcmVuYW1lKCJEcnVnX24iID0gbikNCg0KQ29tcGxpY2F0aW9uX0NvdW50IDwtIENvbXBsaWNhdGlvbnMgJT4lDQogIGdyb3VwX2J5KGRpc2NoYXJnZVJlY29yZElkKSAlPiUNCiAgY291bnQoKSAlPiUNCiAgcmVuYW1lKCJDb21wbGljYXRpb25fbiIgPSBuKQ0KDQpQcm9jZWR1cmVfQ291bnQgPC0gUHJvY2VkdXJlICU+JQ0KICByb3d3aXNlKCkgJT4lDQogIGxlZnRfam9pbiguLCBIaXN0b19Db3VudCkgJT4lDQogIG11dGF0ZShIaXN0b19uID0gbnVsbF90b19uaWwoSGlzdG9fbikpICAlPiUNCiAgdW5ncm91cCgpICU+JQ0KICBncm91cF9ieShkaXNjaGFyZ2VSZWNvcmRJZCwgSGlzdG9fbikgJT4lDQogIGNvdW50KCkgJT4lDQogIHJlbmFtZSgiUHJvY2VkdXJlX24iID0gbikNCg0KUmFkaW9sb2d5X0NvdW50IDwtIFJhZGlvbG9neSAlPiUNCiAgZ3JvdXBfYnkoZGlzY2hhcmdlUmVjb3JkSWQpICU+JQ0KICBjb3VudCgpICU+JQ0KICByZW5hbWUoIlJhZGlvbG9neV9uIiA9IG4pDQoNCkNvbXBsaWNhdGlvbl9HcmFkZSA8LSBDb21wbGljYXRpb25zICU+JQ0KICBzZWxlY3QoZGlzY2hhcmdlUmVjb3JkSWQsIEdyYWRlKQ0KI0NhbiBSZXBsYWNlIEFnZUlDRCB3aXRoIExPU0FnZQ0KI0dlbmVyYXRlcyBTdW1tYXJpc2VkIERpc2NoYXJnZSBTdW1tYXJ5IHdpdGggTWVkaWNhdGlvbiwgUHJvY2VkdXJlcyAmIEludmVzdGlnYXRpb25zDQpNZXJnZWRfTWVkIDwtIGxlZnRfam9pbihBZ2VJQ0QsIE1lZGljYXRpb25fQ291bnQpICU+JQ0KICBtdXRhdGUoRHJ1Z19uID0gbnVsbF90b19uaWwoRHJ1Z19uKSkgJT4lDQogIGxlZnRfam9pbiguLCBQcm9jZWR1cmVfQ291bnQpICU+JQ0KICBtdXRhdGUoUHJvY2VkdXJlX24gPSBudWxsX3RvX25pbChQcm9jZWR1cmVfbikpICU+JQ0KICBtdXRhdGUoSGlzdG9fbiA9IG51bGxfdG9fbmlsKEhpc3RvX24pKSAlPiUNCiAgbGVmdF9qb2luKC4sIENvbXBsaWNhdGlvbl9Db3VudCkgJT4lDQogIG11dGF0ZShDb21wbGljYXRpb25fbiA9IG51bGxfdG9fbmlsKENvbXBsaWNhdGlvbl9uKSkgJT4lDQogIGxlZnRfam9pbiguLCBSYWRpb2xvZ3lfQ291bnQpICU+JQ0KICBtdXRhdGUoUmFkaW9sb2d5X24gPSBudWxsX3RvX25pbChSYWRpb2xvZ3lfbikpICU+JQ0KICBzZWxlY3QobGV2ZWxPZkNhcmUsIGRpc2NoYXJnZVR5cGUsIGRpc2NoYXJnZVdhcmQsIE1vbnRoLCBZZWFyLCBMT1MsIGdlbmRlciwgZXRobmljaXR5LCBhZ2UsIEFnZV9Hcm91cCwgDQogICAgICAgICBJQ0RfQ2hhcHRlcl9TaG9ydCwgSUNEX1RpdGxlLCBJQ0RfRGVzY3JpcHRpb24sIERydWdfbiwgUHJvY2VkdXJlX24sIEhpc3RvX24sIFJhZGlvbG9neV9uLCBDb21wbGljYXRpb25fbikgJT4lDQogIG11dGF0ZShMT1NfT3V0Y29tZSA9IGlmZWxzZShMT1MgPiA1LCAxLCAwKSwNCiAgICAgICAgIERydWdfcmF0ZSA9IERydWdfbiAvIExPUywNCiAgICAgICAgIFByb2NlZHVyZV9yYXRlID0gUHJvY2VkdXJlX24gLyBMT1MsDQogICAgICAgICBIaXN0b19yYXRlID0gSGlzdG9fbiAvIExPUywNCiAgICAgICAgIFJhZGlvbG9neV9yYXRlID0gUmFkaW9sb2d5X24gLyBMT1MsDQogICAgICAgICBDb21wbGljYXRpb25fcmF0ZSA9IENvbXBsaWNhdGlvbl9uIC8gTE9TKQ0KDQpkZWNsYXJfTWVyZ190eXBlIDwtIGZ1bmN0aW9uKCkgew0KICBNZXJnZWRfTWVkJGxldmVsT2ZDYXJlIDw8LSBmYWN0b3IoTWVyZ2VkX01lZCRsZXZlbE9mQ2FyZSkNCiAgTWVyZ2VkX01lZCRkaXNjaGFyZ2VUeXBlIDw8LSBmYWN0b3IoTWVyZ2VkX01lZCRkaXNjaGFyZ2VUeXBlKQ0KICBNZXJnZWRfTWVkJGRpc2NoYXJnZVdhcmQgPDwtIGZhY3RvcihNZXJnZWRfTWVkJGRpc2NoYXJnZVdhcmQpDQogIE1lcmdlZF9NZWQkZ2VuZGVyIDw8LSBmYWN0b3IoTWVyZ2VkX01lZCRnZW5kZXIpDQogIE1lcmdlZF9NZWQkZXRobmljaXR5IDw8LSBmYWN0b3IoTWVyZ2VkX01lZCRldGhuaWNpdHkpDQogIE1lcmdlZF9NZWQkQWdlX0dyb3VwIDw8LSBmYWN0b3IoTWVyZ2VkX01lZCRBZ2VfR3JvdXAsIG9yZGVyZWQgPSBGQUxTRSkNCiAgTWVyZ2VkX01lZCRNb250aCA8PC0gZmFjdG9yKE1lcmdlZF9NZWQkTW9udGgpDQogIE1lcmdlZF9NZWQkWWVhciA8PC0gZmFjdG9yKE1lcmdlZF9NZWQkWWVhcikNCiAgTWVyZ2VkX01lZCRMT1NfT3V0Y29tZSA8PC0gZmFjdG9yKE1lcmdlZF9NZWQkTE9TX091dGNvbWUsIGMoMCwgMSksIG9yZGVyZWQgPSBGQUxTRSkNCiAgTWVyZ2VkX01lZCRJQ0RfQ2hhcHRlcl9TaG9ydCA8PC0gZmFjdG9yKE1lcmdlZF9NZWQkSUNEX0NoYXB0ZXJfU2hvcnQsIG9yZGVyZWQgPSBGQUxTRSkNCiAgTWVyZ2VkX01lZCRJQ0RfVGl0bGUgPDwtIGZhY3RvcihNZXJnZWRfTWVkJElDRF9UaXRsZSwgb3JkZXJlZCA9IEZBTFNFKQ0KICBNZXJnZWRfTWVkJElDRF9EZXNjcmlwdGlvbiA8PC0gZmFjdG9yKE1lcmdlZF9NZWQkSUNEX0Rlc2NyaXB0aW9uLCBvcmRlcmVkID0gRkFMU0UpDQp9DQpyZXF1aXJlKGFvZCkNCg0KZGVjbGFyX01lcmdfdHlwZSgpDQpNZXJnZWRfTWVkJEFnZV9Hcm91cCA8LSBvcmRlcmVkKE1lcmdlZF9NZWQkQWdlX0dyb3VwLCBhZ2VfbGlzdCkNCg0KZ2VuZGVyX2Nyb3NzIDwtIGNyb3NzX3RhYihNZXJnZWRfTWVkJGdlbmRlciwgTWVyZ2VkX01lZCRMT1NfT3V0Y29tZSkNCmV0aG5pY2l0eV9jcm9zcyA8LSBjcm9zc190YWIoTWVyZ2VkX01lZCRldGhuaWNpdHksIE1lcmdlZF9NZWQkTE9TX091dGNvbWUpDQpBZ2VfR3JvdXBfY3Jvc3MgPC0gY3Jvc3NfdGFiKE1lcmdlZF9NZWQkQWdlX0dyb3VwLCBNZXJnZWRfTWVkJExPU19PdXRjb21lKQ0KZGlzY2hhcmdlV2FyZF9jcm9zcyA8LSBjcm9zc190YWIoTWVyZ2VkX01lZCRkaXNjaGFyZ2VXYXJkLCBNZXJnZWRfTWVkJExPU19PdXRjb21lKQ0KZGlzY2hhcmdlVHlwZV9jcm9zcyA8LSBjcm9zc190YWIoTWVyZ2VkX01lZCRkaXNjaGFyZ2VUeXBlLCBNZXJnZWRfTWVkJExPU19PdXRjb21lKQ0KSUNEX0NoYXB0ZXJfU2hvcnRfY3Jvc3MgPC0gY3Jvc3NfdGFiKE1lcmdlZF9NZWQkSUNEX0NoYXB0ZXJfU2hvcnQsIE1lcmdlZF9NZWQkTE9TX091dGNvbWUpDQpJQ0RfVGl0bGVfY3Jvc3MgPC0gY3Jvc3NfdGFiKE1lcmdlZF9NZWQkSUNEX1RpdGxlLCBNZXJnZWRfTWVkJExPU19PdXRjb21lKQ0KDQpNZXJnZWRfTWVkJEFnZV9Hcm91cCA8LSBmYWN0b3IoTWVyZ2VkX01lZCRBZ2VfR3JvdXApDQoNCmZpbHRlcl9uaWwoTWVyZ2VkX01lZCRkaXNjaGFyZ2VXYXJkKQ0KTWVyZ2VkX01lZCA8LSBNZXJnZWRfTWVkICU+JQ0KICBmaWx0ZXIoIWdlbmRlciAlaW4lIGZpbHRlcl9uaWwoTWVyZ2VkX01lZCRnZW5kZXIpLA0KICAgICAgICAgIWV0aG5pY2l0eSAlaW4lIGZpbHRlcl9uaWwoTWVyZ2VkX01lZCRldGhuaWNpdHkpLA0KICAgICAgICAgIUFnZV9Hcm91cCAlaW4lIGZpbHRlcl9uaWwoTWVyZ2VkX01lZCRBZ2VfR3JvdXApLA0KICAgICAgICAgIWRpc2NoYXJnZVdhcmQgJWluJSBmaWx0ZXJfbmlsKE1lcmdlZF9NZWQkZGlzY2hhcmdlV2FyZCksDQogICAgICAgICAhZGlzY2hhcmdlVHlwZSAlaW4lIGZpbHRlcl9uaWwoTWVyZ2VkX01lZCRkaXNjaGFyZ2VUeXBlKSwNCiAgICAgICAgICFJQ0RfQ2hhcHRlcl9TaG9ydCAlaW4lIGZpbHRlcl9uaWwoTWVyZ2VkX01lZCRJQ0RfQ2hhcHRlcl9TaG9ydCksDQogICAgICAgICAhSUNEX1RpdGxlICVpbiUgZmlsdGVyX25pbChNZXJnZWRfTWVkJElDRF9UaXRsZSkpDQoNCmRlY2xhcl9NZXJnX3R5cGUoKQ0KDQogIExPU19SZWdyZXNzIDwtDQogICAgZ2xtKA0KICAgICAgTE9TX091dGNvbWUgfiBnZW5kZXIsDQogICAgICBkYXRhID0gTWVyZ2VkX01lZCwNCiAgICAgIGZhbWlseSA9ICJiaW5vbWlhbCINCiAgICApDQoNCiAgdGVzdFAgPC0NCiAgICBhcy5kYXRhLmZyYW1lKGNiaW5kKGNiaW5kKA0KICAgICAgT1IgPSBjb2VmKExPU19SZWdyZXNzKSwgY29uZmludChMT1NfUmVncmVzcykNCiAgICApLCBwID0gcm91bmQoY29lZigNCiAgICAgIHN1bW1hcnkoTE9TX1JlZ3Jlc3MpDQogICAgKVssIDRdLCA0KSkpDQoNCiAgd1Rlc3QgPC0NCiAgICB3YWxkLnRlc3QoDQogICAgICBiID0gY29lZihMT1NfUmVncmVzcyksDQogICAgICBTaWdtYSA9IHZjb3YoTE9TX1JlZ3Jlc3MpLA0KICAgICAgVGVybXMgPSAyOm5sZXZlbHMoTWVyZ2VkX01lZCRnZW5kZXIpDQogICAgKQ0KICANCiAgZ2VuZGVyX1RhYiA8LSByZWdyZXNzX3RhYmxlKHRlc3RQKQ0KICBnZW5kZXJfd2FsZCA8LSB3YWxkX3RhYmxlKHdUZXN0KQ0KICANCiAgTE9TX1JlZ3Jlc3MgPC0NCiAgICBnbG0oDQogICAgICBMT1NfT3V0Y29tZSB+IGV0aG5pY2l0eSwNCiAgICAgIGRhdGEgPSBNZXJnZWRfTWVkLA0KICAgICAgZmFtaWx5ID0gImJpbm9taWFsIg0KICAgICkNCiAgDQogIHRlc3RQIDwtDQogICAgYXMuZGF0YS5mcmFtZShjYmluZChjYmluZCgNCiAgICAgIE9SID0gY29lZihMT1NfUmVncmVzcyksIGNvbmZpbnQoTE9TX1JlZ3Jlc3MpDQogICAgKSwgcCA9IHJvdW5kKGNvZWYoDQogICAgICBzdW1tYXJ5KExPU19SZWdyZXNzKQ0KICAgIClbLCA0XSwgNCkpKQ0KICANCiAgd1Rlc3QgPC0NCiAgICB3YWxkLnRlc3QoDQogICAgICBiID0gY29lZihMT1NfUmVncmVzcyksDQogICAgICBTaWdtYSA9IHZjb3YoTE9TX1JlZ3Jlc3MpLA0KICAgICAgVGVybXMgPSAyOm5sZXZlbHMoTWVyZ2VkX01lZCRldGhuaWNpdHkpDQogICAgKQ0KICANCiAgZXRobmljaXR5X1RhYiA8LSByZWdyZXNzX3RhYmxlKHRlc3RQKQ0KICBldGhuaWNpdHlfd2FsZCA8LSB3YWxkX3RhYmxlKHdUZXN0KQ0KICANCiAgTE9TX1JlZ3Jlc3MgPC0NCiAgICBnbG0oDQogICAgICBMT1NfT3V0Y29tZSB+IEFnZV9Hcm91cCwNCiAgICAgIGRhdGEgPSBNZXJnZWRfTWVkLA0KICAgICAgZmFtaWx5ID0gImJpbm9taWFsIg0KICAgICkNCiAgDQogIHRlc3RQIDwtDQogICAgYXMuZGF0YS5mcmFtZShjYmluZChjYmluZCgNCiAgICAgIE9SID0gY29lZihMT1NfUmVncmVzcyksIGNvbmZpbnQoTE9TX1JlZ3Jlc3MpDQogICAgKSwgcCA9IHJvdW5kKGNvZWYoDQogICAgICBzdW1tYXJ5KExPU19SZWdyZXNzKQ0KICAgIClbLCA0XSwgNCkpKQ0KICANCiAgd1Rlc3QgPC0NCiAgICB3YWxkLnRlc3QoDQogICAgICBiID0gY29lZihMT1NfUmVncmVzcyksDQogICAgICBTaWdtYSA9IHZjb3YoTE9TX1JlZ3Jlc3MpLA0KICAgICAgVGVybXMgPSAyOm5sZXZlbHMoTWVyZ2VkX01lZCRBZ2VfR3JvdXApDQogICAgKQ0KICANCiAgQWdlX0dyb3VwX1RhYiA8LSByZWdyZXNzX3RhYmxlKHRlc3RQKQ0KICBBZ2VfR3JvdXBfd2FsZCA8LSB3YWxkX3RhYmxlKHdUZXN0KQ0KICANCiAgTE9TX1JlZ3Jlc3MgPC0NCiAgICBnbG0oDQogICAgICBMT1NfT3V0Y29tZSB+IGRpc2NoYXJnZVdhcmQsDQogICAgICBkYXRhID0gTWVyZ2VkX01lZCwNCiAgICAgIGZhbWlseSA9ICJiaW5vbWlhbCINCiAgICApDQogIA0KICB0ZXN0UCA8LQ0KICAgIGFzLmRhdGEuZnJhbWUoY2JpbmQoY2JpbmQoDQogICAgICBPUiA9IGNvZWYoTE9TX1JlZ3Jlc3MpLCBjb25maW50KExPU19SZWdyZXNzKQ0KICAgICksIHAgPSByb3VuZChjb2VmKA0KICAgICAgc3VtbWFyeShMT1NfUmVncmVzcykNCiAgICApWywgNF0sIDQpKSkNCiAgDQogIHdUZXN0IDwtDQogICAgd2FsZC50ZXN0KA0KICAgICAgYiA9IGNvZWYoTE9TX1JlZ3Jlc3MpLA0KICAgICAgU2lnbWEgPSB2Y292KExPU19SZWdyZXNzKSwNCiAgICAgIFRlcm1zID0gMjpubGV2ZWxzKE1lcmdlZF9NZWQkZGlzY2hhcmdlV2FyZCkNCiAgICApDQogIA0KICBkaXNjaGFyZ2VXYXJkX1RhYiA8LSByZWdyZXNzX3RhYmxlKHRlc3RQKQ0KICBkaXNjaGFyZ2VXYXJkX3dhbGQgPC0gd2FsZF90YWJsZSh3VGVzdCkNCiAgDQogIExPU19SZWdyZXNzIDwtDQogICAgZ2xtKA0KICAgICAgTE9TX091dGNvbWUgfiBkaXNjaGFyZ2VUeXBlLA0KICAgICAgZGF0YSA9IE1lcmdlZF9NZWQsDQogICAgICBmYW1pbHkgPSAiYmlub21pYWwiDQogICAgKQ0KICANCiAgdGVzdFAgPC0NCiAgICBhcy5kYXRhLmZyYW1lKGNiaW5kKGNiaW5kKA0KICAgICAgT1IgPSBjb2VmKExPU19SZWdyZXNzKSwgY29uZmludChMT1NfUmVncmVzcykNCiAgICApLCBwID0gcm91bmQoY29lZigNCiAgICAgIHN1bW1hcnkoTE9TX1JlZ3Jlc3MpDQogICAgKVssIDRdLCA0KSkpDQogIA0KICB3VGVzdCA8LQ0KICAgIHdhbGQudGVzdCgNCiAgICAgIGIgPSBjb2VmKExPU19SZWdyZXNzKSwNCiAgICAgIFNpZ21hID0gdmNvdihMT1NfUmVncmVzcyksDQogICAgICBUZXJtcyA9IDI6bmxldmVscyhNZXJnZWRfTWVkJGRpc2NoYXJnZVR5cGUpDQogICAgKQ0KICANCiAgZGlzY2hhcmdlVHlwZV9UYWIgPC0gcmVncmVzc190YWJsZSh0ZXN0UCkNCiAgZGlzY2hhcmdlVHlwZV93YWxkIDwtIHdhbGRfdGFibGUod1Rlc3QpDQogIA0KICBMT1NfUmVncmVzcyA8LQ0KICAgIGdsbSgNCiAgICAgIExPU19PdXRjb21lIH4gSUNEX0NoYXB0ZXJfU2hvcnQsDQogICAgICBkYXRhID0gTWVyZ2VkX01lZCwNCiAgICAgIGZhbWlseSA9ICJiaW5vbWlhbCINCiAgICApDQogIA0KICB0ZXN0UCA8LQ0KICAgIGFzLmRhdGEuZnJhbWUoY2JpbmQoY2JpbmQoDQogICAgICBPUiA9IGNvZWYoTE9TX1JlZ3Jlc3MpLCBjb25maW50KExPU19SZWdyZXNzKQ0KICAgICksIHAgPSByb3VuZChjb2VmKA0KICAgICAgc3VtbWFyeShMT1NfUmVncmVzcykNCiAgICApWywgNF0sIDQpKSkNCiAgDQogIHdUZXN0IDwtDQogICAgd2FsZC50ZXN0KA0KICAgICAgYiA9IGNvZWYoTE9TX1JlZ3Jlc3MpLA0KICAgICAgU2lnbWEgPSB2Y292KExPU19SZWdyZXNzKSwNCiAgICAgIFRlcm1zID0gMjpubGV2ZWxzKE1lcmdlZF9NZWQkSUNEX0NoYXB0ZXJfU2hvcnQpDQogICAgKQ0KICANCiAgSUNEX0NoYXB0ZXJfU2hvcnRfVGFiIDwtIHJlZ3Jlc3NfdGFibGUodGVzdFApDQogIElDRF9DaGFwdGVyX1Nob3J0X3dhbGQgPC0gd2FsZF90YWJsZSh3VGVzdCkNCiAgDQogIExPU19SZWdyZXNzIDwtDQogICAgZ2xtKA0KICAgICAgTE9TX091dGNvbWUgfiBJQ0RfVGl0bGUsDQogICAgICBkYXRhID0gTWVyZ2VkX01lZCwNCiAgICAgIGZhbWlseSA9ICJiaW5vbWlhbCINCiAgICApDQogIA0KICB0ZXN0UCA8LQ0KICAgIGFzLmRhdGEuZnJhbWUoY2JpbmQoY2JpbmQoDQogICAgICBPUiA9IGNvZWYoTE9TX1JlZ3Jlc3MpLCBjb25maW50KExPU19SZWdyZXNzKQ0KICAgICksIHAgPSByb3VuZChjb2VmKA0KICAgICAgc3VtbWFyeShMT1NfUmVncmVzcykNCiAgICApWywgNF0sIDQpKSkNCiAgDQogIHdUZXN0IDwtDQogICAgd2FsZC50ZXN0KA0KICAgICAgYiA9IGNvZWYoTE9TX1JlZ3Jlc3MpLA0KICAgICAgU2lnbWEgPSB2Y292KExPU19SZWdyZXNzKSwNCiAgICAgIFRlcm1zID0gMjpubGV2ZWxzKE1lcmdlZF9NZWQkSUNEX1RpdGxlKQ0KICAgICkNCiAgDQogIElDRF9UaXRsZV9UYWIgPC0gcmVncmVzc190YWJsZSh0ZXN0UCkNCiAgSUNEX1RpdGxlX3dhbGQgPC0gd2FsZF90YWJsZSh3VGVzdCkNCg0KYGBgDQojIyMgTGVuZ3RoIG9mIFN0YXkgUmVncmVzc2lvbiBBbmFseXNpcw0KQW5hbHlzaXMgb2YgcHJlZGljdG9ycyBvZiBhIGxlbmd0aCBvZiBzdGF5IGdyZWF0ZXIgdGhhbiA1IGRheXMgaW4gYSBzdXJnaWNhbCB3YXJkIGF0IGEgV2l0cyBpbnN0aXR1dGlvbi4NCg0KIyMjIyBDcm9zc3RhYmxlIEFuYWx5c2lzDQoNCiMjIyMjIFNleCBDcm9zc3RhYmxlDQpgciBnZW5kZXJfY3Jvc3NgDQoNCiMjIyMjIEV0aG5pY2l0eSBDcm9zc3RhYmxlDQpgciBldGhuaWNpdHlfY3Jvc3NgDQoNCiMjIyMjIEFnZSBHcm91cCBDcm9zc3RhYmxlDQpgciBBZ2VfR3JvdXBfY3Jvc3NgDQoNCiMjIyMjIERpc2NoYXJnZSBXYXJkIENyb3NzdGFibGUNCmByIGRpc2NoYXJnZVdhcmRfY3Jvc3NgDQoNCiMjIyMjIFR5cGUgb2YgRGlzY2hhcmdlIENyb3NzdGFibGUNCmByIGRpc2NoYXJnZVR5cGVfY3Jvc3NgDQoNCiMjIyMjIElDRCBDaGFwdGVyIENyb3NzdGFibGUNCmByIElDRF9DaGFwdGVyX1Nob3J0X2Nyb3NzYA0KDQojIyMjIyBJQ0QgQmxvY2sgVGl0bGUgQ3Jvc3N0YWJsZQ0KYHIgSUNEX1RpdGxlX2Nyb3NzYA0KDQojIyMjIFVuaXZhcmlhdGUgUmVncmVzc2lvbiBBbmFseXNpcw0KDQojIyMjIyBHZW5kZXIgUmVncmVzc2lvbg0KYHIgZ2VuZGVyX1RhYmANCiMjIyMjIyBXYWxkIFNpZ25pZmljYW5jZQ0KYHIgZ2VuZGVyX3dhbGRgDQoNCiMjIyMjIEV0aG5pY2l0eSBSZWdyZXNzaW9uDQpgciBldGhuaWNpdHlfVGFiYA0KIyMjIyMjIFdhbGQgU2lnbmlmaWNhbmNlDQpgciBldGhuaWNpdHlfd2FsZGANCg0KIyMjIyMgQWdlIEdyb3VwIFJlZ3Jlc3Npb24NCmByIEFnZV9Hcm91cF9UYWJgDQojIyMjIyMgV2FsZCBTaWduaWZpY2FuY2UNCmByIEFnZV9Hcm91cF93YWxkYA0KDQojIyMjIyBEaXNjaGFyZ2UgV2FyZCBSZWdyZXNzaW9uDQpgciBkaXNjaGFyZ2VXYXJkX1RhYmANCiMjIyMjIyBXYWxkIFNpZ25pZmljYW5jZQ0KYHIgZGlzY2hhcmdlV2FyZF93YWxkYA0KDQojIyMjIyBUeXBlIG9mIERpc2NoYXJnZSBSZWdyZXNzaW9uDQpgciBkaXNjaGFyZ2VUeXBlX1RhYmANCiMjIyMjIyBXYWxkIFNpZ25pZmljYW5jZQ0KYHIgZGlzY2hhcmdlVHlwZV93YWxkYA0KDQojIyMjIyBJQ0QgQ2hhcHRlciBSZWdyZXNzaW9uDQpgciBJQ0RfQ2hhcHRlcl9TaG9ydF9UYWJgDQojIyMjIyMgV2FsZCBTaWduaWZpY2FuY2UNCmByIElDRF9DaGFwdGVyX1Nob3J0X3dhbGRgDQoNCiMjIyMjIElDRCBCbG9jayBUaXRsZSBSZWdyZXNzaW9uDQpgciBJQ0RfVGl0bGVfVGFiYA0KIyMjIyMjIFdhbGQgU2lnbmlmaWNhbmNlDQpgciBJQ0RfVGl0bGVfd2FsZGANCg0K